express-validator v6.11.1使用body方法报IsEmpty不是函数如何解决?
错误根因
你出现这个报错是因为拼写错误,express-validator 6.11.1版本的非空校验方法名为首字母小写的isEmpty(),你代码中写成了大写首字母的IsEmpty(),程序找不到对应方法才抛出类型错误。
修复方案
修改validator.js文件里的signupValidation方法,把两处IsEmpty替换为isEmpty即可,修改后的代码如下:
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'), // 可按需补充其他校验规则,示例如下 body('email').isEmail().withMessage('请输入合法的邮箱地址'), body('password').isLength({min:6}).withMessage('密码长度不能少于6位') ] } 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 }
修改完成后重启服务,就能正常执行校验逻辑,你示例请求中firstname传空值的场景会正确返回你预设的422错误提示。
小提示:express-validator所有内置校验方法都是首字母小写的驼峰命名,后续使用其他校验规则时注意拼写即可避免同类错误。
内容的提问来源于stack exchange,提问作者Oyedele Femi
相关产品推荐
相关产品推荐

