' res.location(路径)'什么都不做? (快递)

时间:2018-05-08 21:29:09

标签: javascript node.js express handlebars.js httprequest

我一直在寻找 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   当前网址或引荐网址以及中指定的网址   位置标头;并相应地重定向用户。

  • 我尝试使用与Firebase SDK 2018兼容的最新Node.js (服务器)
  • 我在Google Chrome和IE Edge (客户端)
  • 中尝试了此操作

1 个答案:

答案 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代码可以看到它们之间的差异。