Express-validator-获取错误

时间:2019-06-25 03:55:43

标签: node.js express express-validator

我正在尝试构建路由中间件功能来验证表单,但是我对如何获取错误感到有些困惑。

validationErrors如何填充,如何在route函数中访问它?我在文档和其他网站上找到的示例对我没有帮助

路线:

use strict';

const express = require('express');
const router = express.Router();
const User = require('../back/api/models/UserModel');
const Helper = require('./handlerInputs.js');
const bcrypt = require('bcrypt');

router.post('/registrar', [Helper.validaRegistro], function (req, res, next) {

    const errors = validationResult(req).throw();
    if (errors) {
      return res.status(422).json({ errors: errors });  
    }

   [... user register code .... ]
});

处理程序:

'use strict'

const { check, validationResults } = require('express-validator');

exports.validaRegistro = function(req, res, next){

    check(req.body.nome)
      .not().isEmpty()
      .withMessage('Nome é obrigatório')
      .isLength({min: 3, max: 20})
      .withMessage('Nome deve ter entre 3 e 20 caracteres')
      .isAlpha('Nome deve ser literal');

    check(req.body.email)
      .normalizeEmail()
      .isEmail()
      .withMessage('Email inválido'); 

  optPwd = {
      checkNull: false,
      checkFalsy: false
  }

  check(req.body.password)
    .exists(optPwd)
    .withMessage('Senha é obrigatória');

    check(req.body.password === req.body.passordconf)
    .exists()
    .withMessage('Confirme a senha')
    .custom((value, { req }) => value === req.body.password)
    .withMessage('Senhas não são iguais')
    .custom((value, { req }) => value.length >= 8)


    const result = req.getValidationResults();
    const erros = req.ValidationErrors;

    if(erros){
        console.log(erros);
    }
    ???? 

}

1 个答案:

答案 0 :(得分:2)

您可以做的是,只需在中间件内部编写验证逻辑,而不是在不同的控制器上一次又一次地编写相同的内容。

创建通用逻辑的另一种最佳方法是将验证规则放在不同的文件上,并将处理验证逻辑放在不同的文件中。 请遵循此URL,我已经以有效的方式实现了同样的事情。

https://github.com/narayansharma91/node_quick_start_with_knex

 if(erros){
        const status = 422;
        res.status(status).json({
          success: false,
          status,
          errors: errors.array(),
        });
    }