res.render() 和 next(),不经意间犯得一个小错误
发布于 9个月前 作者 struCoder 520 次浏览

直接进入主题吧,不去啰嗦了 我在我的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 ! :)

3 回复

嗯嗯。这种少了 return 的小错误,在 if (err) {next(err)} 中也很容易出现。

嗯,是的。小错误不能再犯 :)

也可以使用if-else做法

回到顶部