为什么请求主体在POSTMAN中返回未定义

wfveoks0  于 2022-11-07  发布在  Postman
关注(0)|答案(3)|浏览(315)

我用nodejs创建了一个crud rest api,我正在用postman测试这个api。任何时候我用postman中的“Body”发送一个请求,req.body返回未定义。可能是什么原因呢?

gijlo24d

gijlo24d1#

一个常见的错误是忘记了主体解析器NPM。
下面的代码展示了用Node.JS和Express创建一个服务器和API是多么简单。

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")
})
hpxqektj

hpxqektj2#

历史:

早期版本的Express曾经捆绑了很多中间件。bodyParser是其中一个中间件。当Express 4.0发布时,他们决定从Express中删除捆绑的中间件,并将其改为单独的软件包。在安装bodyParser模块后,语法从app.use(express.json())更改为app.use(bodyParser.json())
bodyParser在4.16.0版本中被添加回Express,因为人们希望它像以前一样捆绑在Express中。这意味着如果你使用最新版本,你就不必再使用bodyParser.json()。你可以使用express.json()来代替。
4.16.0的发行历史记录是here,对于感兴趣的人来说,拉取请求是here
好吧,回到正题,

实施:

你只需要加上

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

进路申报前,代替、

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

快递会处理你的要求。:)
完整示例如下所示:

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")
})
wr98u20j

wr98u20j3#

有时候,当你从Postman发送form-data时会发生这种情况,请尝试x-www-form-urlencoded data. formdata会将未定义但urlencoded数据显示为正确的值。x1c 0d1x

相关问题