Express Validator非空校验异常:字段不为空仍报错求助
问题排查与解决方案
核心问题分析
从响应结果里看到value是空字符串,说明校验阶段req.body.text实际为空——即便你认为请求里传了值。大概率是中间件执行顺序错误或者请求体未被正确解析导致的。
具体解决方案
1. 调整中间件顺序
你的路由里把校验中间件checkPost()放在了文件上传中间件uploadImg前面:
router.post("/", checkPost(), uploadImg, createPost);
如果uploadImg是multer这类处理multipart/form-data的中间件,它负责解析请求体里的表单数据和文件。在校验之前执行它的话,校验阶段req.body还没被解析,自然拿不到text字段的值,就会触发空值校验错误。
把顺序改成:
router.post("/", uploadImg, checkPost(), createPost);
让文件上传中间件先解析请求体,再执行校验。
2. 确认请求体解析中间件配置
根据你发送请求的Content-Type,确保express应用已经配置了对应的解析中间件:
- 若发送JSON格式请求:
app.use(express.json()); // 放在路由配置之前 - 若发送普通表单请求(
application/x-www-form-urlencoded):app.use(express.urlencoded({ extended: true })); - 若发送带文件的表单请求(
multipart/form-data):确保multer的uploadImg配置正确,比如:// 示例multer配置 import multer from 'multer'; const uploadImg = multer({ dest: 'uploads/' }); // 或自定义存储配置
3. 调试确认请求体内容
在createPost函数开头添加日志,确认实际拿到的req.body是什么:
export const createPost = async (req, res) => { try { console.log('Received req.body:', req.body); // 打印请求体 const errors = validationResult(req); // ... 后续代码 } }
通过日志可以直观看到text字段是否真的被正确传递到后端。
内容的提问来源于stack exchange,提问作者Ghost
相关产品推荐
相关产品推荐

