为什么POSTMAN中的req.body返回undefined

4
我使用Node.js创建了一个CRUD REST API,并使用Postman进行测试。每当我使用Postman中的“Body”发送请求时,req.body返回undefine。可能是什么原因呢?

你需要添加更多的细节。 - James A Mohler
使用 bodyParser -- https://dev59.com/UVoT5IYBdhLWcg3wrA-5 - pfcodes
分享一下你是如何解析请求体、请求参数、请求头等内容的。 - Shams Nahid
什么是路由?在该路由处理程序中的代码是什么?在 Postman 中,您是否使用 x-www-form-urlencoded 来发送参数? - SanSolo
req.params 是否也返回 undefined ? - IrfanAnwar
3个回答

7

一个常见的错误是忘记安装body-parser NPM。

以下代码片段展示了如何使用Node.JS和Express创建简单的服务器和API。 首先安装NPM。

npm install body-parser express --save

然后尝试运行这段代码:

const express       = require('express')
const app           = express()
const bodyParser    = require('body-parser')

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: false }))

app.post('/test-url', (req, res) => {
    console.log(req.body)
    return res.send("went well")
})

app.listen(3000, () => {
    console.log("running on port 3000")
})

1
+1 - 我的路由定义在bodyparser之上时会返回未定义。将其移动到下面,就可以完成调用了。 - Faye Hayes

2

历史:

早期版本的Express中包含了很多中间件。其中 bodyParser 是其中之一。当发布Express 4.0时,开发者决定将这些中间件从Express中分离出来,并制作成单独的包。在安装 bodyParser 模块后,语法从 app.use(express.json()) 变为 app.use(bodyParser.json())

由于人们希望像以前一样将其捆绑到Express中,因此在4.16.0版中将 bodyParser 加回了Express。这意味着如果您使用最新版本,则不再需要使用 bodyParser.json(),而可以改用 express.json()

对于那些感兴趣的人,4.16.0的发布历史可以在这里找到,而拉请求则在这里

好了,回到正题,

实现:

你只需要添加以下代码:

app.use(express.json());
app.use(express.urlencoded({ extended: true}));

在路由声明之前,使用以下代码替换:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

您的请求将由Express处理。:)

完整示例如下,

const express       = require('express')
const app           = express()

app.use(express.json())
app.use(express.urlencoded({ extended: true}));

app.post('/test-url', (req, res) => {
    console.log(req.body)
    return res.send("went well")
})

app.listen(3000, () => {
    console.log("running on port 3000")
})

1
有时候在 Postman 中以 form-data 的形式发送数据时,会出现 undefined 的情况。建议尝试使用 x-www-form-urlencoded 格式的数据,这种格式可以正确地显示数值。 enter image description here

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接