我正在创建一个API,并决定使用express-validator进行验证(duh),我以前从未使用过这个,所以我对它的某些方面不确定,所以我的验证可能不是最好的,但我通过
我已经用它建立了两个验证中间件,并从相同的文件夹导出它们,像这样:
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
来解决这个问题,你可以在这里阅读更多关于这个本质上这是拯救我的代码:
// 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() });
};
};