Postman返回500 internal server error及Express POST接口报错排查
问题原因
你遇到的报错核心有两种可能:一是Express默认未开启请求体解析功能,未配置对应中间件时无法识别POST提交的JSON数据,导致req.body未定义;二是代码里可能漏写req.前缀,直接调用了不存在的body变量。
解决步骤
- 补全Express请求体解析配置
如果你使用的是Express 4.16及以上版本,框架内置了JSON解析中间件,无需额外安装依赖,只需在app.use(express.static(__dirname))行之后新增app.use(express.json())配置即可。修改后的完整代码如下:
var express = require('express') var app = express() app.use(express.static(__dirname)) // 新增JSON请求体解析中间件,用来解析POST提交的JSON格式数据 app.use(express.json()) // 若后续需要接收x-www-form-urlencoded格式的表单数据,可额外添加以下配置 // app.use(express.urlencoded({ extended: true })) var messages = [ { name: 'Tim', message: 'Hemlo'}, {name: 'Jane', message: 'Hoi' } ] app.get('/messages', (req,res)=>{ res.send(messages) }) app.post('/messages', (req,res)=>{ // 检查此处是否确实写的是req.body,不要漏写req.前缀 console.log(req.body) res.sendStatus(200) }) app.listen(3008, () =>{ console.log('server listening') })
- 检查Postman请求配置
- 进入POST请求的
Headers标签页,确认存在Content-Type字段,值为application/json - 进入
Body标签页,选择raw选项,右侧格式下拉框选择JSON,再填入你要提交的JSON数据:{"name": "jane", "message": "aaa"}
修改完成后重启Node服务,重新发起POST请求即可正常接收数据,返回200状态码。
内容的提问来源于stack exchange,提问作者Meow02
相关产品推荐
相关产品推荐

