验证通过 multiparty 解析的 multipart-form 数据并通过 express-validator 验证

Validating multipart-form data parsed through multiparty and validation through express-validator

我正在发送多部分表单数据并将其保存在服务器上,但数据在未经任何验证的情况下被保存。为了解析数据,我使用 multiparty and express-validator 进行 post 数据验证,但我在没有任何验证的情况下保存数据。

要将此数据发送到我正在使用的服务器 postman.

我的服务器端代码如下

exports.signup = function(req, res) {
  var form = new multiparty.Form();

  // Validation checks
  req.assert('first_name', 'first name is required').notEmpty(),
  req.assert('last_name', 'last name is required').notEmpty();
  req.assert('email', 'valid email is required').notEmpty().isEmail();
  req.assert('password', 'password field is required').notEmpty().len(6, 10);

  var errors = req.validationErrors();
  if( !errors){
      form.parse(req, function(err, body , files) {
          ////////
          code to save the data on server goes here
      });

  }
  else if (errors) {
      return res.status(400).send({
          'error': errors
      });
  }
};

目前,您正在尝试在解析正文字段之前对其进行验证,这是不可能的。

您必须在 form.parse() 回调中移动 req.assert()req.validationErrors() 行。例如:

exports.signup = function(req, res) {
  var form = new multiparty.Form();
  form.parse(req, function(err, body, files) {
    if (err)
      return res.status(500).end();

    req.body = body;

    // Validation checks
    req.assert('first_name', 'first name is required').notEmpty(),
    req.assert('last_name', 'last name is required').notEmpty();
    req.assert('email', 'valid email is required').notEmpty().isEmail();
    req.assert('password', 'password field is required').notEmpty().len(6, 10);

    var errors = req.validationErrors();

    if (errors) {
      res.status(400).send({
        'error': errors
      });
    } else
      res.status(200).end();
  });
};