我做了一个简单的auth自定义中间件但是出错了。我不知道发生了什么,我以为next()会解决我的问题?
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.');
^
答案 0 :(得分:0)
问题是即使next
是假的,req.user
也会被调用,因为在调用res.redirect
后执行没有停止,next
尝试在res.redirect
之后设置标头{1}}已发出回复,只需将其替换为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
});