验证检查后执行验证中间件

时间:2019-03-16 19:44:24

标签: javascript node.js express-validator

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

我的验证中间件是

"{* * test * { * username: {{username}} * } }"
  .substr(1)
  .slice(0, -1)
  .split("* * test *")
  .pop()
  .replace(" { *","{\n\t")
  .replace("* } ", "\t\n}");

,然后在调用控制器之前在路由中使用它。这是我的 topics.js 路由文件的一部分

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

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

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

    next();
}

我尝试使用docs

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

但是在启动API时出现此错误

  

错误:Route.post()需要回调函数,但得到了[对象   布尔]

所以看来我无法先传递数组,然后传递验证中间件,然后传递控制器。

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

1 个答案:

答案 0 :(得分:1)

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

在路由中,您使用check('parentTopicId').isUUID() || check('parentTopicId').isNull(),但返回布尔值和express需要中间件。 oneOf专为此目的而构建。

另外,您应将!check替换为check('name').not().isEmpty()