node.js - 设置后无法发送标头
问题描述
我的登录页面中有此代码
//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)
解决方案
您将两次发送渲染。最好的方法是在flashMessages.error
like之后返回
//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
推荐阅读
- android - 2 日期选择器作为 android 中的微调器
- arrays - 在堆上创建一个结构数组,并为所有成员分配内存
- javascript - 单击时切换按钮背景颜色
- python - 过滤数据框中至少一行满足条件的所有行
- excel - Excel VBA - 从具有 11000 多行和 53 列的数据透视表中获取数据
- sql - 我用“EXCEPT”错了吗?(SQL)
- javascript - 我正在使用引导程序,除工具提示外一切正常
- docker - 在 docker run 上找不到快递
- database - 在颤动中打开具有不同适配器的蜂巢盒
- database - 数据库如何将 VARCHAR 保存在文件中