【问题标题】:execute validation middleware after validation checks在验证检查后执行验证中间件
【发布时间】:2019-03-16 19:44:24
【问题描述】:

我想创建一个 Express REST API 并想验证请求参数和请求正文。如果一切正常,我想调用控制器逻辑。

我的验证中间件是

const { validationResult } = require('express-validator/check');

module.exports = (req, res, next) => {
    const validationErrors = req.validationResult();

    if (!validationErrors.isEmpty()) {
        // send a 400
    }

    next();
}

我在调用控制器之前在我的路由中使用它。这是我的 topics.js 路由文件

的 sn-p
const validation = require('../middleware/validation.js');
const { check } = require('express-validator/check');

router.get('/', topicsController.getAllTopics);

router.get('/:topicId', [
    check('topicId').isUUID()
], validation, topicsController.getTopicById);

router.post('/', authenticationCheck, authorizationCheck, [
    check('parentTopicId').isUUID() || check('parentTopicId').isNull(), // check if it's a UUID. If not, check if it's null
    !check('name').isEmpty(), // is it not empty?
], validation, topicsController.createTopic);

router.put('/:topicId', authenticationCheck, authorizationCheck, [
    check('topicId').isUUID(),
    check('parentTopicId').isUUID() || check('parentTopicId').isNull(),
    !check('name').isEmpty(),
], validation, topicsController.updateTopic);

router.delete('/:topicId', authenticationCheck, authorizationCheck, [
    check('topicId').isUUID()
], validation, topicsController.deleteTopic);

我试图通过文档了解它

https://express-validator.github.io/docs/#basic-guide

但在启动 API 时出现此错误

错误:Route.post() 需要一个回调函数但得到一个 [object 布尔]

所以看来我不能先传入一个数组,然后是验证中间件,然后是控制器。

有没有办法修复路由文件?我不想在我的控制器文件中处理验证逻辑。我认为这应该在之前完成。

【问题讨论】:

    标签: javascript node.js express-validator


    【解决方案1】:

    您需要使用oneOf 来检查条件参数。

    在您的路线中,您使用 check('parentTopicId').isUUID() || check('parentTopicId').isNull() 但这会返回一个布尔值,并且 express 需要一个中间件。 oneOf 是专门为此构建的。

    您还应该将!check 替换为check('name').not().isEmpty()

    【讨论】:

    • 感谢您的帮助。我将其更新为 pastebin.com/scNKnHNy 但这并没有解决它
    • 你也在使用 !check.isEmpty() 你应该使用 check.not().isEmpty()
    • 谢谢。有没有办法检查某个东西是否是null?因为isNull 也不是函数 :(
    • 所以我不想检查变量是否为空,我真的需要检查它是否为空
    • 是的,如果您使用的是 express 验证器 >= 5.3.0,您可以使用 .exists 并使用选项 checkNull。 express-validator.github.io/docs/…
    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    相关资源
    最近更新 更多