'res.location(path)'什么都没做? (表达)

问题描述 投票:1回答:1

我一直在寻找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;并相应地重定向用户。

  • 我尝试使用与Firebase SDK 2018兼容的最新Node.js(服务器)
  • 我在谷歌Chrome和IE Edge(客户端)中试过这个
javascript node.js express handlebars.js httprequest
1个回答
1
投票

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.locationres.redirect代码以查看它们之间的差异。

© www.soinside.com 2019 - 2024. All rights reserved.