【问题标题】:res.redirect Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the clientres.redirect 错误 [ERR_HTTP_HEADERS_SENT]:在将标头发送到客户端后无法设置标头
【发布时间】:2021-02-26 14:37:34
【问题描述】:

不断收到指向 res.redirect 的错误...我认为添加“return”会修复它,因为它允许中间件结束但错误仍然存​​在

功能如下

app.post('/login', (req,res) => {
   //set this up with passport ideally... auth with db 
   var username = req.body.email
   var password = req.body.password
  
   User.findOne({email:username})
   .then(user => {
      if(user) {
         bcrypt.compare(password, user.password, function(err, result) {
            if(err) {
               //maybe send this back in res json?
               console.log(err)
               return res.redirect('/login')
            }
            else if(result){
               //let token = jwt.sign({name:user.name}, )
               req.session.user = user.dataValues
               console.log('Login successful')
               return res.redirect('/dashboard');       //error happening here
            }else {
               console.log('Password does not match')
               return res.redirect('/login')
            }
         })
      }
   })
   res.redirect('/')
})

这是我的输出

Login successful
undefined:0



Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:533:11)
    at ServerResponse.header (/Users/sherm/Documents/daily_email/node_modules/express/lib/response.js:771:10)
    at ServerResponse.location (/Users/sherm/Documents/daily_email/node_modules/express/lib/response.js:888:15)
    at ServerResponse.redirect (/Users/sherm/Documents/daily_email/node_modules/express/lib/response.js:926:18)
    at /Users/sherm/Documents/daily_email/server.js:79:27 {
  code: 'ERR_HTTP_HEADERS_SENT'
}
npm ERR! code ELIFECYCLE

【问题讨论】:

  • 为什么底部有res.redirect('/')?删除它。

标签: javascript node.js express


【解决方案1】:

问题是,在触发User.findOne(...).then 之前,您正在调用res.redirect('/')(示例的第27 行)。因此,如果找到用户,您的结果标头已经由该重定向发送。

试试这个:

...
User.findOne({email:username})
   .then(user => {
      if(user) {
        ...
      } else
        res.redirect('/')
   })
...

【讨论】:

    猜你喜欢
    • 2020-05-26
    • 2018-09-19
    • 2020-09-22
    • 2023-01-19
    • 2021-08-20
    • 2019-09-28
    • 2019-12-25
    • 2021-11-30
    相关资源
    最近更新 更多