快速验证器主体不起作用

问题描述

我正在使用 express-validator 版本 6.11.1 来验证来自 API 调用的数据输入,每次我使用 check 或 body 进行验证时,我都会收到以下错误

TypeError: body(...).not(...).IsEmpty 不是函数

我使用下面的代码创建了一个名为 validator.js 的帮助程序

const { body,validationResult } = require('express-validator')
const bcrypt = require('bcrypt')

const signupValidation = () => {
    return [
        body('firstname')
            .not().IsEmpty().withMessage('Firstname field is required'),body('lastname')
            .not().IsEmpty().withMessage('Lastname field is required')
    ]
}

const validate = (req,res,next) => {
    const errors = validationResult(req)
    if (errors.isEmpty()) {
        return next()
    }
    const extractedErrors = []
    errors.array().map(err => extractedErrors.push({ msg: err.msg }))

    res.status(200).json({
        statusCode: 422,error: extractedErrors
    })
}

module.exports = {
    signupValidation,validate
}

调用它的路线看起来像

const { signupValidation,validate } = require('../../helpers/validator')

//Endpoint to create new merchant
router.post('/account/create-merchant',signupValidation(),validate,async (req,res) => {
    res.status(200).json({ 
        statusCode: 201,message: req.body
    })
})

来自 API 的示例数据

{
    "firstname": "","lastname": "Jon","phone" : "*****","email" : "oayayayaya","password": "******"
}

您能否指导我如何解决错误消息(TypeError: body(...).not(...).IsEmpty is not a function)

解决方法

我认为应该是 isEmpty() 而不是 IsEmpty(),试试这个:

const signupValidation = () => {
    return [
        body('firstname')
            .not().isEmpty().withMessage('Firstname field is required'),body('lastname')
            .not().isEmpty().withMessage('Lastname field is required')
    ]
}

检查文档 here