设置标头后无法发送标头

时间:2018-10-10 15:40:09

标签: node.js express node-modules

我的登录页面上有此代码

//get login
router.get('/login', function(req, res, next) {
    const flashMessages = 
res.locals.getMessages( );
    if( flashMessages.error ){
        res.render( 'login', {
            showErrors: true,
            errors: flashMessages.error
        });
    }else{
        res.render( 'login' )
    }
    //console.log( 'flash', flashMessages);
  res.render('login', { title: 'LOG IN'});
});

有时,当我尝试获取登录页面时,有时会看到空白页面,或者有时,当我尝试登录时,我停留在登录页面而不是仪表板中。有时,我看不到标题中的值。当我检查日志(nodemon)时,我看到此错误

Error: /var/www/html/akahline/views/error.hbs: Can't set headers after they are sent.               at validateHeader (_http_outgoing.js:491:11)    at ServerResponse.setHeader (_http_outgoing.js:498:3)

1 个答案:

答案 0 :(得分:0)

您要发送两次渲染。最好的方法是像这样在flashMessages.error之后返回

//get login
router.get('/login', function(req, res, next) {
    const flashMessages = res.locals.getMessages( );
    if( flashMessages.error ){
        return res.render( 'login', {
            showErrors: true,
            errors: flashMessages.error
        })
    }

  //console.log( 'flash', flashMessages);
  res.render('login', { title: 'LOG IN'});
});

如果使用showErrors登录时出错,则返回此错误,如果没有使用您的title登录则返回此错误