为什么在Node.js的Express POST请求中,'body'为空?

4
我试图在Postman发送的请求体中捕获原始数据。以下是原始数据:
{
    "hello": "world"
}

我在服务器中使用 app.use(express.json())。当我发送Post请求时,只会得到一个空的JSON。这是为什么呢?

App.js代码:

import express from "express"
import { connectDb } from "./connectDb.js"
import create from "./routes/create.js" // router

const app = express()
app.use(express.json())

connectDb()

const PORT = process.env.PORT || 5000

app.use("/api", create)

app.listen(PORT, () => console.log(PORT, "Connected..."))

路由器代码:

import express from "express"
import Game from "../models/gamesModel.js" // mongoose model
const router = express.Router()

router.route("/create/game").post(async (req, res) => {
  console.log(req.body)
  try {
    const game = await Game.create(req.body)
    res.json(game)
  } catch (error) {
    res.json({ message: "Invalid Information" })
  }
})

我们需要一些代码。 - Andrey Popov
这是您的路由器。您需要展示服务器的设置方式以及发送请求的方式... - Andrey Popov
它位于主JavaScript文件(app.js)中,并且在路由器代码之前使用。 - Dastan
@AndreyPopov 添加了(app.js)代码... - Dastan
2
如果您尚未设置头文件,在使用Postman测试HTTP POST操作时,选择原始选项并设置以下标头参数Content-Type: application/json - Deepak kumar jain
@Deepakkumarjain 谢谢,伙计。那就是问题所在。 - Dastan
2个回答

1

在您的头部文件中进行更正:

content-type: application/json

1

如果您正在使用POSTMAN,并且使用内置的express.json中间件,以便通过req.body访问请求正文,则必须确保使用RAW类型发送请求正文,并将正文类型设置为JSON,如下图所示。

enter image description here

如果将 body 类型设置为其他内容(如文本、JavaScript、HTML、XML),则仍会得到空的 body。只有当它被设置为 JSON 时,您才会获得作为请求体一部分发送的数据填充到 req.body 中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接