没有得到任何回应 - Express Validator

Not getting any response - Express Validator

我正在使用最新版本的 express-validator 进行验证。 我没有收到任何回复,但是旧方法 checkBody 工作正常,而新方法 check('keyName') 工作不正常。

下面是我的代码。

package.json

"express-validator": "^5.0.3",

routes.js

var authValidator = require('./../validation/auth.validation');
var routes = require('express').Router();

routes.post('/login', [
  authValidator.validateLogin, 
  authValidator.checkValidationResult ], function (req, res) {
     console.log('3');
     //res.send("Some other stuffs");
  }
);

module.exports = routes;

auth.validation.js

module.exports.validateLogin = validateLogin;
module.exports.checkValidationResult = checkValidationResult;

const {check, validationResult} = require('express-validator/check');
const {matchedData, sanitize} = require('express-validator/filter');

var response = require('./../general/MyResponse');
var messages = require('./../general/messages');

function validateLogin(req, res, next) {
  console.log('1');
  return [
    check('email').isLength({min: 1}).withMessage(messages.EMAIL_REQUIRED)
    .isEmail().withMessage(messages.INVALID_EMAIL),
    check('password').isLength({min: 1}).withMessage(messages.PASSWORD_REQUIRED),
  ]
}

function checkValidationResult(req, res, next) {
  console.log('2');
  var result = validationResult(req)
  if (!result.isEmpty()) {
    response.createResponse(
      res, 400,
      result.array()[0].msg,
      {'error': result.array()[0].msg}, {}
    )
  } else {
    next()
  }
}

我注意到节点 js 无法从 auth.validation.js 中的函数 validateLogin 继续执行。

谁能告诉我上面的代码有什么问题。

在控制台内部,只有 1 个正在显示。

我附上截图以供参考。

validateLogincheckValidationResult 作为中间件应用到您的路由。在中间件中,您使用 next() 方法调用队列中的下一个中间件。就像在您的 checkValidationResult 中一样。

validateLogin 的情况下,它不会将控制传递给下一个中间件。但是 express-validator v5 中的 check 方法本身就是一个中间件方法。因此我猜它不会正常工作。

请看:https://github.com/ctavan/express-validator/issues/449

尝试使用以下代码:

routes.js

var authValidator = require('./../validation/auth.validation');
var routes = require('express').Router();
var authValidations = authValidator.getAuthValidations();

routes.post('/login', 
  authValidations,
  authValidator.checkValidationResult, function (req, res) {
     console.log('3');
     //res.send("Some other stuffs");
  }
);

module.exports = routes;

auth.validations.js

module.exports.getAuthValidations = getAuthValidations;
module.exports.checkValidationResult = checkValidationResult;

const {check, validationResult} = require('express-validator/check');
const {matchedData, sanitize} = require('express-validator/filter');

var response = require('./../general/MyResponse');
var messages = require('./../general/messages');

function getAuthValidations(req, res, next) {
  return [
    check('email').isLength({min: 1}).withMessage(messages.EMAIL_REQUIRED)
    .isEmail().withMessage(messages.INVALID_EMAIL),
    check('password').isLength({min: 1}).withMessage(messages.PASSWORD_REQUIRED),
  ]
}

function checkValidationResult(req, res, next) {
  console.log('2');
  var result = validationResult(req)
  if (!result.isEmpty()) {
    response.createResponse(
      res, 400,
      result.array()[0].msg,
      {'error': result.array()[0].msg}, {}
    )
  } else {
    next()
  }
}

我们需要使用简单的数组,不需要创建函数。

关注这个link Is it possible to do the validation in a separate file and not inline in the route? - GitHub了解更多详情。

代码应该是这样的。

auth.validation.js

var response = require('./../general/MyResponse');
var messages = require('./../general/messages');

const {check, validationResult} = require('express-validator/check');
const {matchedData, sanitize} = require('express-validator/filter');

module.exports.validateLogin = [
    check('email').isLength({min: 1}).withMessage(messages.EMAIL_REQUIRED).isEmail().withMessage(messages.INVALID_EMAIL),
    check('password').isLength({ min: 1 }).withMessage(messages.PASSWORD_REQUIRED),
];

module.exports.checkValidationResult = checkValidationResult;

function checkValidationResult(req, res, next) {
    console.log('2');
    var result = validationResult(req)
    if (!result.isEmpty()) {
        response.createResponse(res, 400,
            result.array()[0].msg,
            {'error': result.array()[0].msg}, {}
        )
    } else {
        next()
    }
}

`