我一直在寻找Stack Overflow的答案;没有工作......为什么res.location(path)
不起作用?我的位置标题不会更改。正常渲染工作正常。
我可以补充一点,在最终的代码中,我想渲染页面。所以,我想用res.end()
替换res.render('app', {...})
并使用handlebars.js进行渲染。
代码无法按预期工作:
app.get('/sub-link/:wildcard', (req, res) => {
res.location('/new-header');
res.end();
});
我一直在读documentation;找不到原因。我发现唯一可能是问题的是浏览器:
对URL进行编码后,如果尚未编码,Express会将指定的URL传递到Location标头中的浏览器,而不进行任何验证。
浏览器负责从当前URL或引用URL以及Location头中指定的URL派生预期的URL;并相应地重定向用户。
res.location
未将响应状态代码设置为3xx或201.它仅设置Location标头。
您可以使用res.redirect
将状态代码设置为302,并使浏览器更改URL。
位置响应标头指示将页面重定向到的URL。它仅在提供3xx(重定向)或201(已创建)状态响应时提供含义。
这将有效:
app.get('/sub-link', (req, res) => {
res.location('/new-header');
res.send(302);
});
要么
app.get('/sub-link', (req, res) => {
res.redirect('/new-header');
});
您可以查看res.location和res.redirect代码以查看它们之间的差异。