簡體   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