Javascript 在使用expressjs发送到客户端后,无法设置标头

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

我想在成功登录后重定向到另一个页面,但它向我显示了一条消息“发送到客户端后无法设置标题”,我知道我应该将res.redirect放在其他地方,但我真的很难做到这一点

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 >这个值被自动地连接到你的请求并且可以被服务器读取。谢谢你!!!!!我无法真诚地表达我现在有多高兴,谢谢你的帮助,看到人们互相帮助是一种快乐