res.redirect 后面必须要接return吗? 答案看情况

我最近学到Express框架,用到redirect, 视频里面有时候就说要return,有时候又不要return,遂查了一下

情况一:

User.findOne({name: name},function(err, user){
        
        if(err) {
            console.log(err);
        }

        if(!user) {
            return res.redirect('/login_error_user_not_exists');
            // 上面这句等同于下面这两行,先进行redirect,后接一个return
            // res.redirect('/login_error_user_not_exists');
            // return;
        }   

        /**
        *  注意上面这段代码, 如果我查询后根本就没有这个user 
        *  要查到了那肯定user是存在的嘛,现在是没有, user为null, !user为 true
        *  所有重定向到'/login_error_user_not_exists'
        *  但是注意,我们后面还有一个密码匹配的方法,如果不return的话,下面密码验证会继续进行
        *  但这是没有意义的,没有这用户都,还验证密码干嘛,所以我们此刻要添加return, 来结束这个
        *  路由函数,不浪费性能也不做没意义的事(验证密码正确)    
        */     

        user.comparePassword(password, function(err, isMatch){
            if(err) console.log(err);
 
            if(isMatch) {
                console.log('Password is matched');
                return res.redirect('/');
            }else{
                console.log('Password is not matched');
            }
        })
})

 

情况二:

// login_guard.js file [middleware]
// check if the page being requested is login page
// check the state of the user whether logged in
// if the user is logged in, then pass the request
// otherwise check the role of the current user
// if it is normal, then we redirect it to home page
// if not, 
function guard(req, res, next) {
    if (req.url != '/login' &&  !req.session.username) {
        res.redirect('/admin/login');
    }else{
        if (req.session.role == 'normal') {
            res.redirect('/home');
            return;
        }

        next(); // 这个是只有登陆后角色是admin(管理员)才可以进行的操作
    }
}

module.exports.login_guard = guard;

注意: 

这个函数里面,有个if-else判断,第一个if(req.url != '/login' &&  !req.session.username)不用管什么意思,就知道是没登陆就访问管理面板的情况下,就都让他先跳转到登陆页面,先给我登陆去再说,先让我看看你登陆后的角色是什么,是管理员(admin),还是一般的用户(normal), 给你分别呈现跳转页面。如果是这种情况呢,那我进入这个if语句之后就跳转就完事了,下面没有需要我执行的代码了,所以此刻,我return与否后面都没有什么要执行的操作了,结不结束也都结束了,因为return是为了结束后面代码的执行,我现在后面都没有要执行的代码了,结果不都一样吗现在,所以不需要return了,

 

现在再看那个else语句里面,我先判断你登录的角色是不是【普通用户】,是就先拦截了,给你跳转到主页,就别想着进我管理页面了,一个普通用户, 而后面那个是只有登陆后角色是【管理员】才可以执行的操作,所以我在上面的那个普通用户跳转就需要添加return操作,否则继续往下执行,就执行了next()操作,那不乱套了嘛,你一普通用户,还能干我管理员才能进行的操作,所以需要加return,阻止下面的代码执行,

 

感觉第二个例子举得不是很恰当,但也没找到更好的,希望大家凑活看吧,希望能帮到和我一样,对这块有点不清楚的同学。

觉得好,劳驾您点个赞呗,哈哈哈O(∩_∩)O~

参考:

return res.redirect('/')这个return有啥用?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值