can'的中间崩溃返回错误;t设置标题
middle crashed returning error of can't set headers
我做了一个简单的auth自定义中间件,但出现了错误。我不知道发生了什么,我以为下一个()会解决我的问题吗?
app.use(function(req, res, next){
if(req.user){
res.locals.username = req.user.username
}else{
res.redirect('/login');
}
next();
});
router.get('/login', function(req, res, next) {
res.render('login');
});
我的错误
_http_outgoing.js:335
throw new Error('Can''t set headers after they are sent.');
^
问题是,即使req.user
失败,也会调用next
,因为调用res.redirect
后执行不会停止,next
在res.redirect
发出响应后尝试设置标头,所以只需将其替换为return res.redirect('/login')
,就可以继续了。
EDIT在这种情况下,中间件在每个路由上运行,导致循环问题,因为登录路由也需要进行身份验证,可以这样修复。
function auth(req, res, next) {
// authenticate and call next or redirect
}
router.get('/login', function(req, res) {
res.render('login');
});
router.get('/authentic', auth, function(req, res) {
// body
});
相关文章:
- 可以设置“;文件名"发生错误时显示的内联脚本标记的
- NodeJS错误-Can't在发送标头后设置标头
- 错误:Can't在从forEach循环发送标头后设置标头
- 未捕获的类型错误:无法设置属性'innerHTML'如果为null,则将脚本移动到正文不会;不起作用
- PhantomJS(vs nightwatch.js)设置cookie错误
- 未捕获的类型错误:无法设置属性'背景'的未定义
- Express 4错误:Can't在发送标头后设置标头
- 任何人都知道IE7设置或更新/补丁,它可以防止IE因为jquery错误而无法加载页面
- JavaScript数组值设置错误
- 当张贴到数据库时,I'我得到了一个“;可以't在它们被发送错误之后设置报头”;
- Javascript设置日期不起作用,显示错误的时间
- NodeJS未处理的拒绝错误:Can't在发送标头后设置标头
- 未捕获的类型错误:无法设置属性'onclick'为null.已尝试window.onload
- 未捕获类型错误:无法设置未定义的属性“操作”
- 节点.js未捕获的异常类型错误:无法设置未定义的预处理 ''
- 谷歌地图:- 无效值错误:设置图标:不是字符串;并且没有网址属性;并且没有路径属性
- Json字符串如果键错误设置显示.否则显示数据
- jquery数据表的Javascript语法错误设置属性
- ES6 /巴别塔传播错误设置
- 创建图像元素,然后通过javascript错误设置样式属性