函数处理路由怎么可能采用两个以上的参数



我是node js的新手。我正在了解使用 jwt 进行身份验证。据我所知,快递中的请求处理程序是这样的

app.post('/login',function(req,res){...});

下面是我感到困惑的片段。

应用.js.

var userController = require('./Controllers/user');
var authController = require('./Controllers/auth');
var tokenController = require('./Controllers/validate');
var deviceController = require('./Controllers/device');
app.post('/login',userController.validate,authController.authorize,userController.login);

如果我们仔细观察,发布方法有 4 个参数。任何人都可以解释一下下面的功能是如何工作的吗?

app.post('/login',userController.validate,authController.authorize,userController.login);



还添加开发人员正在导入的 js 文件

用户.js

exports.validate = function(req,res,next) {
  if(req.body.email === undefined){
      return res.status(401).send({'message':'Email is required'});
  }
  if(req.body.password === undefined){
      return res.status(401).send({'message':'Password is required'});
  }
  next();
};
const login = exports.login = function (req,res){
    User.findOne({email:req.body.email},function(err, user){
        if(err){
            return res.status(401).send(err);
        }
        user.token = jwt.sign(user.password, 'TOPSECRETTTT');
        user.save(function (err,user) {
            if (err) {
                res.send(err);
                return;
            }
            res.status(200).send({email:user.email,loginToken:user.token});
        })
    });
};

身份验证.js

passport.use(new LocalStrategy({
        usernameField: 'email',
        passwordField: 'password'
    },
    (function(username, password, callback) {
        User.findOne({ email: username }, function(err, user) {
            if (err) {
                return callback(err);
            }
            if (!user) {
                return callback(null, false);
            }
            user.matchPassword(password, function(err, isMatch) {
                if (err) {
                    return callback(err);
                }
                if (!isMatch) {
                    return callback(null, false);
                }
                return callback(null, user);
            });
        });
    })));
exports.authorize = passport.authenticate('local', { session: false });

让我知道是否有任何源/链接可以找到更多这样的实现。

正如评论中提到的,express是关于中间件的 - 如果它与路由匹配,它将按顺序通过这些中间件功能,直到达到res.send()

在这种情况下,中间件验证POST数据,然后创建用户,对其进行身份验证,并返回授权令牌。每个中间件都使用一个next();继续到链中的下一个中间件,如果它在任何时候失败,它会发送相应的失败响应,并带有具有错误状态代码的res.send()。 在这种情况下401 Unauthorized

最新更新