直接进入主题吧,不去啰嗦了
我在我的routes.js中是这么写的app.get('/stu/bacic',auth.checkLogin,stuBasicInfo.getBasicInfo);
就是先验证是否登录,之后才跳转,原本这是一个很容易的事情,可我还是遇到一个小问题
思考片刻后就解决了。
####什么问题呢?####
我在auth.js中是这么写的:
exports.checkLogin = function(req,res,next){
if(!req.session.user){
res.render('notify',{
title:'登录提示',
error:'您还未登录,请登录!'
});
}
next();
}
聪明的你已经发现,这里有个很明显的错误,那么这个错误会有怎么样的表现呢?我调试的时候打开对应的url,发现浏览器 一直在进行加载的状态,我又点击其他的连接,毫无任何的反应,之后我又仔细的看了上面的那几行代码, 当时就觉的node在我点击对应的url时,代码执行到res.render(),之后又向下迅速执行next(),就这样,我的notify还没有渲染,就已经执行了next()。所以浏览器一直忙啊~~~,这时如果打开其他的url,是不成功的。 因为我在开发阶段,所以直接把res.render()全部注释了,这样就okay了,如果正式开发的话, 解决方法就是在res.render()前加一个return ! :)
嗯嗯。这种少了 return 的小错误,在 if (err) {next(err)}
中也很容易出现。
嗯,是的。小错误不能再犯 :)
也可以使用if-else做法
这是为什么啊
@alsotang 新手尤其容易遇到这个错误,express报过不少 Can’t set headers after they are sent- -
@Eclipse-xp 出现错误,处理掉,不然执行完错误处理,又继续执行“正确”的逻辑…