我用nodejs创建了一个crud rest api,我正在用postman测试这个api。任何时候我用postman中的“Body”发送一个请求,req.body返回未定义。可能是什么原因呢?
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") })
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。好吧,回到正题,
bodyParser
app.use(express.json())
app.use(bodyParser.json())
bodyParser.json()
express.json()
你只需要加上
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") })
wr98u20j3#
有时候,当你从Postman发送form-data时会发生这种情况,请尝试x-www-form-urlencoded data. formdata会将未定义但urlencoded数据显示为正确的值。x1c 0d1x
3条答案
按热度按时间gijlo24d1#
一个常见的错误是忘记了主体解析器NPM。
下面的代码展示了用Node.JS和Express创建一个服务器和API是多么简单。
然后试试这段代码:
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。
好吧,回到正题,
实施:
你只需要加上
进路申报前,代替、
快递会处理你的要求。:)
完整示例如下所示:
wr98u20j3#
有时候,当你从Postman发送form-data时会发生这种情况,请尝试x-www-form-urlencoded data. formdata会将未定义但urlencoded数据显示为正确的值。x1c 0d1x