mongodb - node.js如何使剩下的路由文件不执行?

浏览:29日期:2023-06-12

问题描述

比如我要进行密码修改功能,有旧密码新密码,旧密码的验证与新密码的修改分开。请问如何使新密码的修改不执行?

router.get(’/:userid’, function(req, res,next) { if(req.session.userid){return next(); } res.redirect(’/login’);});router.get(’/:userid’, function(req,res,next){ User.find(req.session.userid,function(err,doc){res.render(’changepassword’,{ userid: req.session.userid, user:doc}); });});router.post('/:userid',function(req,res) { User.findOne({name: req.session.userid,pwd: req.body.oldpwd }, function (err, doc) {if (err) { r.error = err; return;}if (doc) { console.log(’success’);} else { console.log(’fail’); return;}res.json(r); });});//不想使得当旧密码验证不成功的时候让以下代码执行router.post('/:userid',function(req,res) { var u = {pwd :req.body.pwd }; var userid = req.session.userid; if(userid && ’’ != userid) {User.findOneAndUpdate(userid,u,function(err, docs) { console.log(’modify-----’+ docs); res.redirect(’/’);}); }});

问题解答

回答1:

回调函数的参数加上next,验证成功则next,验证失败则返回失败

router.post('/:userid',function(req,res,next) { User.findOne({name: req.session.userid,pwd: req.body.oldpwd }, function (err, doc) {if (err) { r.error = err; return;}if (doc) { console.log(’success’); return next();} console.log(’fail’);res.json(r); });});//不想使得当旧密码验证不成功的时候让以下代码执行router.post('/:userid',function(req,res,next) { var u = {pwd :req.body.pwd }; var userid = req.session.userid; if(userid && ’’ != userid) {User.findOneAndUpdate(userid,u,function(err, docs) { console.log(’modify-----’+ docs); res.redirect(’/’);}); }});

但其实可以合在一起,为什么要分开呢? 比如:

router.get(’/:userid’, function(req, res,next) { if(req.session.userid){  return User.find(req.session.userid,function(err,doc){ res.render(’changepassword’,{userid: req.session.userid,user:doc });}); } res.redirect(’/login’);});回答2:

供参考:

1、router.post('/:userid',function(req,res) { 和 //不想使得当旧密码验证不成功的时候让以下代码执行 router.post('/:userid',function(req,res) {

是重复的router,你需要把下面这段处理代码(修改密码),放到上面去。

2、另外,可以考虑passwort.js做登录这块的管理。

供参考。

Love MongoDB! Have fun!

相关文章: