在expressjs中更改res.redirect上的url

时间:2013-10-28 08:30:15

标签: node.js url angularjs express

app.get('/logout', function (req, res){

    req.url='/';
    console.log('req.url is ' + req.url);

    req.session.state = null;

    res.redirect('/login');
});

在重定向时,'url'保持不变。我希望它也能改变它。我尝试使用req.url。但它没有反映在url-bar上。你怎么改变它?

注意: - 我正在使用Angularjs路由,因此res.redirect不会自动更新网址。

编辑: - 角度代码: -

$http({method: 'GET', url: '/logout'}).
        success(function(data, status, headers, config) {
          console.log('happened');

        }).
        error(function(data, status, headers, config) {
          // called asynchronously if an error occurs
          // or server returns response with an error status.
        });

2 个答案:

答案 0 :(得分:6)

默认情况下,res.redirect会发送一个带有302状态代码的响应和一个带有您调用该函数的URL的Location标头。所以在你的情况下,如:

HTTP/1.1 302 
Location: http://example.com/login/

您需要在AngularJS端处理此问题以更改URL。

答案 1 :(得分:0)

我尝试了上述解决方案,但没有运气。我收到错误消息:header ‘authorization’ is not allowed according to header

我搜寻了一天,并尝试了网络上提供的所有解决方案,以多种方式设置了res.header( "Access-Control-Allow-Headers", "Origin, Authorization, Accept, Content-Type"),研究了许多文章,并对后端进行了许多更改,但似乎Firefox无法找到{{ 1}},它一直在寻找。

但是上面的答案给了我一个更简单的方法来做Authorization的想法!我只是将网址发送到请求响应中的前端,如下所示:

redirect

然后在前端(reactJS)中,我确实要替换窗口位置:

 res.status(201).json({
   message: "Order registered",
   redirectUrl: "http://localhost:3000/payment-check?query"
  })

它以最佳方式重定向,没有任何问题。