快速验证器不会在正确的链上中断

问题描述

我在 nodejs 中使用 express-validator代码总是抛出第一条错误消息作为验证结果。

validation.js

const { check,validationResult } = require('express-validator')
const {handleError,ErrorHandler} = require('../helper/error');

const resultsOfValidation = (req,res,next) => {
  const messages = []; 
  const errors = validationResult(req); 
  if(errors.isEmpty()) {
    return next(); //pass to controller
  }
  errors.array().map( err => messages.push(err.msg));   
  throw new ErrorHandler(400,messages);
} 

const createuserValidator = () => {
     return [
        check('firstName')
            .exists({ checkFalsy: true }).withMessage('First Name is mandatory')
            .bail()
            .isAlpha().withMessage('First Name should have all alphabets') 
            .bail()
            .isLength({min:3}).withMessage('First Name should have minimum 3 characters'),check('lastName')
            .optional({ checkFalsy: true }) //ignore validation when null or empty
            .isAlpha()
            .bail()            
     ]
  }    
   

module.exports = {
      resultsOfValidation,createuserValidator,}

用户路线如下:

const router = express.Router();    
router
    .get('/',getAllUsers)
    .post('/',createuserValidator(),resultsOfValidation,(req,res) => console.log('created'))
    .get('/:id',getUserById)
    .delete('/',deleteUserById)

module.exports = router; 

我的user.js 控制器文件是:

module.exports = {
  getAllUsers: async (req,res)=> {},createuser: async (req,next)=> {
    try{
        const errors = resultsOfValidation(req);
        if (errors.length >0) {                               
            throw new ErrorHandler(400,errors)
        }
        const { firstName,lastName } = req.body;
        // call createuser from model
        const user = await usermodel.createuser(firstName,lastName);
        if(!user) {
            throw new ErrorHandler(404,'User not created')
        }
       // return res.status(200).json({ success: true,user });
      } catch (error) {          
        return res.status(500).json({ success: false,error: error })
      }
  },getUserById: async (req,deleteUserById: async (req,}

这是我提出的发布请求示例。它应该抛出名字应该至少有 3 个字符。但是我遇到了其他错误名字是必需的

Postman request

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)