在nodejs中的res.end()之后重定向

时间:2015-12-05 04:20:01

标签: javascript node.js express

我正在使用jsonwebtoken来验证用户身份。 我的计划是将标记保存在标题中,然后在发出任何请求之前获取标头值。是的,我确实在登录成功时保存了标题中的值,但它应该像其他任何应用程序一样重定向到其他页面。我尝试重定向或渲染其他页面并获得错误

  

发送后无法设置标头。

apiRoutes.post('/authenticate', function(req, res) {

 User.findOne({
 name: req.body.name
  }, function(err, user) {

   if (err) throw err;

if (!user) {
  res.json({ success: false, message: 'Authentication failed. User not found.' });
} else if (user) {


  if (user.password != req.body.password) {
    res.json({ success: false, message: 'Authentication failed. Wrong password.' });
  } else {
    var token = jwt.sign(user, app.get('superSecret'), {
     expiresInMinutes: 60 // expires in 4 hours
    });


  var body = "hello world";
     res.writeHead(200, {
     "Content-Length": body.length,
     "Content-Type": "text/plain",
     "x-access-token":token
 });


     res.end();
     console.log('token saved '+res.getHeader('x-access-token'));

  }   

}

 });
});

这是完整的项目project

2 个答案:

答案 0 :(得分:1)

这没有意义。 http响应只有一个状态代码。它是您的JSON数据,具有200状态或302状态并且设置了Location头。它根本不可能两者兼而有之。选一个。

如果需要,可以在JSON响应中放置一个位置以重定向,并让客户端在处理JSON响应后手动转到该重定向位置。

如果需要,您可以在200响应中放置一个位置标题,但浏览器不会自动遵循该标题。

此外,如果此请求是来自浏览器的Ajax调用,则浏览器不会因为您发送重定向响应而更改页面。接收Ajax调用的代码必须更改页面本身。

此外,repo1/ /module1 /module2 /module3 repo2/ /module4 /module5 会立即发送响应,因此您无法在发送后发送更多内容。

答案 1 :(得分:0)

试试这个,它对我有用......

res.writeHead(200, {
     "Content-Length": body.length,
     "Content-Type": "text/plain",
     "x-access-token":token,
     "Location": "http://www.google.com"
})