如何修复TypeError: expressValidator is not a function错误?
修复expressValidator相关错误的方案
错误根源
报错Route.post() requires a callback function but got a [object Object]是因为你把express-validator的验证规则直接作为路由参数传入,没有按正确的中间件格式使用。
具体修复步骤
1. 先确认包版本
执行命令查看当前express-validator版本:
npm list express-validator
2. v6+版本(主流版本)的正确写法
把所有验证规则放进数组,作为路由的中间件参数,再在处理函数里用validationResult获取验证结果:
const { body, validationResult } = require('express-validator'); // 示例路由 app.post('/your-route', [ // 这里写你的验证规则 body('email').isEmail().withMessage('邮箱格式不正确'), body('password').isLength({ min: 6 }).withMessage('密码长度不能少于6位') ], (req, res) => { // 捕获验证错误 const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // 下面写正常的业务逻辑 res.send('请求验证通过'); });
3. v5及以下旧版本的写法
如果是旧版本,用check替代body,其余逻辑一致:
const { check, validationResult } = require('express-validator'); app.post('/your-route', [ check('email').isEmail().withMessage('邮箱格式不正确'), check('password').isLength({ min: 6 }).withMessage('密码长度不能少于6位') ], (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } // 业务逻辑 });
4. 避坑提醒
- 验证规则必须放在数组里,不能单独作为路由的第二个参数,否则express会把它当成回调函数,导致类型错误。
- 一定要在路由处理函数里调用
validationResult,不然验证规则不会生效,还可能引发其他问题。
内容的提问来源于stack exchange,提问作者kick
相关产品推荐
相关产品推荐

