将标头发送给客户端后无法设置标头

时间:2019-06-04 13:17:26

标签: javascript node.js

我有一个使用postgresql进行身份验证的登录表单,我正在尝试检查用户是否存在,然后将客户端重定向到另一页。代码是:

app.post('/login', (req, res) => {

  var Enteredusername = req.body.username;
  var Enteredpassword = req.body.password;

  pool.query("SELECT * FROM tbl_users WHERE username = $1 AND password = $2", [Enteredusername, Enteredpassword], (err, result) => {
    if (err) return console.log('error in query', err);
    // need to check if user exists
    let user = (result.rows.length > 0) ? result.rows[0] : null;
    if (!user) {

      req.flash('notify', 'This is a test notification.')
      res.render('login', {
        messages: req.flash('Username or Password is incorrect !')
      });
      return res.redirect('/login')

    }
    res.redirect('/posts')

  });
});

我得到了错误:

  

_http_outgoing.js:470      抛出新的ERR_HTTP_HEADERS_SENT('set');

     

错误[ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后,无法设置标头。

我该如何解决?

1 个答案:

答案 0 :(得分:0)

这是在res.redirect('/posts')req.flash之前执行javascript res.render的异步行为,您可以这样来破解它:

req.session.userId = Enteredusername;

if (!user) {

  req.flash('notify', 'This is a test notification.')
  res.render('login', {
    messages: req.flash('Username or Password is incorrect !')
  });

  return res.redirect('/login')

}else{
    return res.redirect('/posts')
}