express-validator验证中间件异常触发问题求助
问题解决方案
核心问题:中间件顺序错误
你的验证中间件validateRestaurant触发全字段错误,本质是multer文件上传中间件在验证之后执行。当用multipart/form-data格式提交请求时,Express默认不会解析请求体里的文本字段,必须通过multer处理后,req.body才能获取到表单中的文本数据。而当前路由中validateRestaurant先执行,此时req.body为空,自然所有字段验证都失败。
修复步骤
调整路由中间件顺序,将upload.single("imageFile")移到validateRestaurant之前,同时保持JWT验证中间件在最前面(确保用户身份验证优先):
router.post( "/", jwtCheck, jwtParse, upload.single("imageFile"), // 先处理上传,解析req.body中的文本字段 validateRestaurant, // 再执行字段验证 createRestaurant );
额外注意事项
修正拼写错误:验证规则里有两处拼写错误,虽不影响逻辑,但建议修正避免混淆:
postivie integar→positive integerpostive number→positive number
修改后的验证片段:
body("estimatedDeliveryTime") .isInt({ min: 0 }) .withMessage("Estimated delivery time must be a positive integer"), body("menuItems.*.price") .isFloat({ min: 0 }) .withMessage("Menu item price is required and must be a positive number"),确认请求格式:前端必须用
multipart/form-data格式提交请求,且文本字段名称要和验证规则中的字段名完全匹配(如restaurantName、city等)。调试排查:如果问题仍存在,可在验证前加调试中间件,确认
req.body是否被正确解析:router.post( "/", jwtCheck, jwtParse, upload.single("imageFile"), (req, res, next) => { console.log("解析后的请求体:", req.body); next(); }, validateRestaurant, createRestaurant );
内容的提问来源于stack exchange,提问作者Mitva Virvadiya
相关产品推荐
相关产品推荐

