为何请求体向服务端发送的参数值为undefined或null?
问题排查解决步骤
- 优先级最高:确认你已注册JSON解析中间件
90%的类似问题都是漏加这行代码,没有中间件的话Express无法解析POST请求里的JSON参数,req.body会返回undefined,三个提取字段都是空值,插入非空字段时会直接报错。
请在所有路由定义的上方添加代码:
如果你用的是更早的Express版本,需要先安装// Express 4.16+ 版本内置解析中间件,直接用即可 app.use(express.json())body-parser包再引入:const bodyParser = require('body-parser') app.use(bodyParser.json()) - 检查参数接收是否正常
你可以在接口逻辑里加一行打印console.log(req.body),发起Postman请求后看控制台输出的三个字段值是否正确,确认Postman里传的参数键名(name/email/question)和你代码里提取的完全一致,没有大小写或者拼写错误。 - 确认ClearDB连接配置正确
检查Heroku后台配置变量里的ClearDB连接信息,有没有正确填入连接池的初始化参数,数据库名、用户名、密码、host地址不要写错。 - 检查字段约束匹配度
确认你传入的三个参数值的长度没有超过MySQL表对应字段的最大长度,比如name字段如果定义的是varchar(20),你传入超过20个字符的内容就会触发插入失败。 - 建议优化错误返回逻辑
你现在的代码只在控制台打印错误,前端收不到报错信息,可以改成把错误信息也返回,方便后续排查:pool.query("INSERT INTO customer_questions (name, email, question) VALUES (?,?,?)", [name, email, question], (err,result)=> { if (err) { console.log(err) // 返回错误信息和500状态码 res.status(500).send('插入失败:' + err.message) }else { res.send('data sent') } } );
内容的提问来源于stack exchange,提问作者ben holsinger
相关产品推荐
相关产品推荐

