PUT 方法上的快速验证器

express-validator on PUT methods

我正在创建一个 API 并决定使用 express-validator 进行验证(呃),我以前从未使用过它所以我不确定它的某些方面所以我的验证可能不是最好的,但我过得很好。

我已经使用它构建了两个验证中间件并将它们从同一个文件夹中导出,如下所示:

module.exports = {
  create: require('./create'),
  update: require('./update')
}

所以我可以在我的路由器中执行此操作:

const validation = require('../validations/plotValidation')

// ...

router.get('/', controller.all)
router.post('/create', validation.create(), controller.create)
router.get('/:plotId', controller.read)
router.put('/:plotId/update', validation.update(), controller.update)
router.delete('/:plotId/delete', controller.delete)

// ...

我对 express-validator 不够好,无法使用同一个文件同时验证两个路由,也许我会在某个时候尝试一下。

.post 方法工作正常并验证了我想要的一切,但是 .put 方法似乎忽略了这里的每个检查是文件,以防您想查看检查:

const { body, check, param } = require('express-validator');

module.exports = () => {
  return [
    param('plotId')
      .exists().withMessage('URI requires plot id'),

    body('price')
      .optional()
      .isObject()
  ]
}

你可能会说我只是说了,但即使只有这两个小支票,它似乎也没有 运行。

express-validator 对 PUT 方法不起作用吗?

对于遇到此问题的任何其他人,我通过在支票上使用 .run 解决了这个问题,您可以阅读更多相关信息 here 本质上,这是救了我的代码:

// parallel processing
const validate = validations => {
  return async (req, res, next) => {
    await Promise.all(validations.map(validation => validation.run(req)));

    const errors = validationResult(req);
    if (errors.isEmpty()) {
      return next();
    }

    res.status(400).json({ errors: errors.array() });
  };
};