我一直在寻找 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传递 在Location标头中指定了浏览器的URL,没有任何 验证
浏览器负责从中派生预期的URL 当前网址或引荐网址以及中指定的网址 位置标头;并相应地重定向用户。
答案 0 :(得分:1)
res.location
没有将响应状态代码设置为3xx或201.它只设置Location标题。
您可以使用res.redirect
来设置状态代码为302,并使浏览器更改网址。
位置响应标头指示将页面重定向到的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代码可以看到它们之间的差异。