Javascript 在使用expressjs发送到客户端后,无法设置标头
我想在成功登录后重定向到另一个页面,但它向我显示了一条消息“发送到客户端后无法设置标题”,我知道我应该将res.redirect放在其他地方,但我真的很难做到这一点Javascript 在使用expressjs发送到客户端后,无法设置标头,javascript,express,Javascript,Express,我想在成功登录后重定向到另一个页面,但它向我显示了一条消息“发送到客户端后无法设置标题”,我知道我应该将res.redirect放在其他地方,但我真的很难做到这一点 router.get('/login',(req,res)=>{ res.render('login') }) router.post('/login',(req,res)=>{ user.findOne({ where: { userName : req.body
router.get('/login',(req,res)=>{
res.render('login')
})
router.post('/login',(req,res)=>{
user.findOne({
where: {
userName : req.body.userName
}
})
.then(userInfo=>{
if(userInfo){
if(bcrypt.compareSync(req.body.password,userInfo.password)){
const token = jwt.sign(userInfo.dataValues,process.env.SECRET_KEY,{
expiresIn:1440
})
res.send(token)
res.redirect('/home')
}
else {
res.status(400).json({error:'user doesnt exist'})
}
}
}
)
})
仅用于将a重定向状态设置为302
并添加标题。您可以将其更改为:
res.setHeader('Location', '/home');
res.send(token);
res.send(token)
真的是你想要做的吗?在我看来,您可能希望在/login
响应中附加设置Cookie
标题。因此,也许你会:
res.setHeader('Set-Cookie', `token=${token}`);
res.redirect('/home');
或者您的服务器根本不应该处理重定向?如果您要将令牌发送回客户端,那么您的客户端可能负责将令牌附加到客户端,然后执行重定向客户端
/* This code is run in the browser after you receive the token, not the server */
document.cookie = `token=${token}`;
window.location.href = '/home';
可以是重定向之前的这一行
res.send(token)
。也许还有别的办法?之后可以这样做吗?谢谢!!!!它现在运行,我使用了第二个选项,同时令牌我想把它存储在本地存储中,你可能想考虑使用<代码>文档。Cookie >这个值被自动地连接到你的请求并且可以被服务器读取。谢谢你!!!!!我无法真诚地表达我现在有多高兴,谢谢你的帮助,看到人们互相帮助是一种快乐