求助:Express Validator无论输入是否有效均返回错误数组
问题原因及解决方案
你的问题根源是Express未配置请求体解析中间件,同时路由注册顺序有误,导致req.body始终为空,express-validator判定name字段缺失,返回错误数组。
解决步骤:
1. 添加请求体解析中间件
在所有路由定义前,添加解析JSON或表单格式请求体的中间件:
// 解析JSON格式请求体 app.use(express.json()); // 解析表单格式请求体(如需支持) app.use(express.urlencoded({ extended: true }));
2. 调整路由与监听顺序
app.listen必须放在所有路由定义之后,否则后续路由无法被注册生效。
修改后的完整代码
import express from "express"; import { router } from "./Routes/CreateUser.js"; import { connect, findFoodItems } from "./db.js"; import { body, validationResult } from "express-validator"; const app = express(); const port = 5000; await connect(); // 新增:请求体解析中间件 app.use(express.json()); app.use(express.urlencoded({ extended: true })); app.get("/", (req, res) => { res.send("Hello World"); }); app.post('/createUser', body('name').notEmpty(), (req, res) => { const result = validationResult(req); if(result.isEmpty()) { return res.send(`Hello ${req.body.name}`); } res.send({errors: result.array()}); }); // 移到所有路由之后 app.listen(port, () => { console.log(`Server is running on port ${port}`); });
3. Postman请求注意事项
发送请求时确保格式匹配:
- JSON格式:选择
Body→raw→格式选JSON,输入{"name": "你的名字"} - 表单格式:选择
Body→x-www-form-urlencoded,添加键为name的字段并赋值
内容的提问来源于stack exchange,提问作者Na N
相关产品推荐
相关产品推荐

