【问题标题】:change url on res.redirect in expressjs在 expressjs 中更改 res.redirect 上的 url
【发布时间】:2013-11-06 22:45:33
【问题描述】:
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 不会自动更新 url。

编辑:- 角代码:-

$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.
        });

【问题讨论】:

  • 您是直接将浏览器导航到/logout,还是使用$http之类的东西?
  • @robertklep 进行了编辑:- 它带有 $http 服务。
  • 在这种情况下,您需要在 Angular 内部执行重定向。

标签: node.js url angularjs express


【解决方案1】:

默认情况下,res.redirect 将发送一个响应,其中包含 302 状态代码和一个 Location 标头,其中包含您调用该函数的 URL。所以在你的情况下是这样的:

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

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

【讨论】:

  • 因为您使用的是 $http,您需要在成功回调中处理 302 响应。我不太了解 Angular,但我认为您可以检查 status 参数以查看它是否为 302,并从 headers 参数中获取位置标头并执行类似 $location.url(headers.Location) 的操作。
  • 不确定此答案是否已过时,因为res.redirect 允许您现在指定状态码。就做res.redirect(301, '/login')
【解决方案2】:

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

我搜索了一天并尝试了网络上提供的所有解决方案来解决这个问题,我通过多种方式设置res.header( "Access-Control-Allow-Headers", "Origin, Authorization, Accept, Content-Type"),研究了很多文章并在我的后端进行了很多更改,但似乎firefox找不到Authorization它正在寻找。

但上面的答案让我想到了以更简单的方式做redirect!我只是在请求响应中将我的 url 发送到前端,如下所示:

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

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

window.location = res.data.redirectUrl

它以最佳方式毫无问题地重定向。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多