[英]req.body is undefined in post route of express app
这是我的路由器
router.post('/', async(req, res) => {
const posts = await loadPostsCollection()
await posts.insertOne({
text: req.body.text,
createdAt: new Date()
})
res.status(201).send()
})
这是终端错误
在端口 3090 上监听.....(节点:7764)UnhandledPromiseRejectionWarning:TypeError:无法读取 /Users/macbook/Desktop/node-project/server/routes/api/posts.js:19 处未定义的属性“文本”: 24 在 processTicksAndRejections (internal/process/task_queues.js:94:5) (node:7764) UnhandledPromiseRejectionWarning: 未处理的 promise 拒绝。 此错误源于在没有 catch 块的情况下抛出异步 function 内部,或拒绝未使用.catch() 处理的 promise。 (拒绝 ID:1)(节点:7764)[DEP0018] DeprecationWarning:不推荐使用未处理的 promise 拒绝。 将来,未处理的 promise 拒绝将使用非零退出代码终止 Node.js 进程。
这是因为您的req.body
将产生值undefined
。 因此,当您尝试执行req.body.text
时,您会收到一个错误,因为您尝试访问undefined
值的text
属性。
您undefined
的原因是您的快速应用程序无法解析请求正文。
为此,您需要安装body-parser
中间件依赖项,
npm i body-parser
然后将此中间件添加到您的快速应用程序中,
const bodyParser = require('body-parser')
app.use(bodyParser.json())
参考: https://expressjs.com/en/resources/middleware/body-parser.html
这是一个示例应用程序,
const express = require('express')
const app = express()
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.post('/', (req, res) => {
return res.send(`Hello ${req.body.name}!`)
})
app.listen(3000, () =>
console.log(`Example app listening at http://localhost:${port}`)
)
现在,如果您使用 curl 调用上述示例应用程序,
curl -XPOST localhost:3000 -H "Content-Type: application/json" -d '{"name":"Ram"}'
您会收到“Hello Ram!”的回复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.