在内部(res,req)函数而不是在中间件内部使用expressjs进行验证

时间:2019-12-29 23:20:30

标签: express express-validator

我正在使用express-validator库在后端进行验证。这是图书馆:

https://express-validator.github.io/docs/index.html

我有这个代码

// ...rest of the initial code omitted for simplicity.
const { check, validationResult } = require('express-validator');

app.post('/user', [
  check('username').isEmail(),
  check('password').isLength({ min: 5 })
], (req, res) => {
  // Finds the validation errors in this request and wraps them in an object with handy functions
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  User.create({
    username: req.body.username,
    password: req.body.password
  }).then(user => res.json(user));
});

是否可以在(req,res)=> {}

内调用验证功能

我有一些要求,在构造验证数组之前,需要检查通过请求到达的内容。

基本上,我希望能够做到这一点:

app.post('/user', (req, res) => {

  const { importantParam, email, password, firstname, lastname } = request.body
  let validateThis = []

  if(importantParam == true)
     validateThis = [
        check('username').isEmail(),
        check('password').isLength({ min: 5 })
     ]
  else 
     validateThis = [
        check('username').isEmail(),
        check('password').isLength({ min: 5 })
        check('firstname').isLength({ min: 5 })
        check('lastname').isLength({ min: 5 })
     ]

  runValidationFunction(validateThis)

  //now below code can check for validation errors
  const errors = validationResult(req);
  if (!errors.isEmpty()) {
    return res.status(422).json({ errors: errors.array() });
  }

  User.create({
    username: req.body.username,
    password: req.body.password
  }).then(user => res.json(user));
});

这是我需要做的,基于其中一个参数是否具有特定值构造验证数组。对于第一个示例,我不知道该怎么做,因为采用这种方法时似乎无法访问请求

app.post('/user', validationArray, (req, res) => {}

任何想法如何直接在内部调用express-validate validate函数

(req, res) => {}

1 个答案:

答案 0 :(得分:1)

您可以做的是在自定义验证中运行检查。您还应该要求f.collection_select :category_ids, .....

validator

希望有帮助!