繁体   English   中英

req.body 在 express 应用的 post 路由中未定义

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM