首页 > 解决方案 > 设置后无法发送标头

问题描述

我的登录页面中有此代码

//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)

标签: node.jsexpressnode-modules

解决方案


您将两次发送渲染。最好的方法是在flashMessages.errorlike之后返回

//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


推荐阅读