【问题标题】:req.body is undefined in post route of express appreq.body 在 express 应用的 post 路由中未定义
【发布时间】:2023-04-06 09:14:01
【问题描述】:

这是我的路由器

router.post('/', async(req, res) => {

const posts = await loadPostsCollection()

await posts.insertOne({
    text: req.body.text,
    createdAt: new Date()
})
res.status(201).send()
})

这是终端错误

在端口 3090 上监听 ..... (node: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:未处理的承诺拒绝。这个 错误源于在异步函数内部抛出 没有 catch 块,或拒绝未处理的承诺 使用 .catch()。 (拒绝 ID:1)(节点:7764)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。在 未来,未处理的承诺拒绝将终止 具有非零退出代码的 Node.js 进程。

【问题讨论】:

  • console.log(req.body) 给出了什么?看来你的第二个错误,你应该使用 trycatch 语句。

标签: javascript node.js express


【解决方案1】:

这是因为您的req.body 将产生值undefined。 因此,当您尝试执行 req.body.text 时,您会在尝试访问 text 值上的 text 属性时遇到错误。

您得到undefined 的原因是您的快速应用无法解析请求正文。

为此,需要安装body-parser中间件依赖,

npm i body-parser

然后将此中间件添加到您的 express 应用中,

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!”的回复

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-07
  • 2017-11-16
  • 2020-04-14
  • 1970-01-01
相关资源
最近更新 更多