gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:18:06 24 4
gpt4 key购买 nike

我正在使用 jsonwebtoken 对用户进行身份验证。我的计划是将 token 保存在 header 处,然后在发出任何请求之前获取 header 值。是的,我确实在成功登录时将值保存在 header 中,但它应该像任何其他应用程序一样重定向到其他页面。我尝试重定向或呈现其他页面并收到错误

Can't set headers after they are sent.

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

最佳答案

这没有意义。一个 http 响应只有一个状态码。它是具有 200 状态的 JSON 数据或具有 Location header 集的 302 状态。它根本不可能两者兼而有之。选择一个。

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

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

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

此外,res.json(...) 会立即发送响应,因此您无法在发送后再写更多内容。

关于javascript - 在 nodejs 中的 res.end() 之后重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34101219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com