Express中的POST请求的req.body为空

时间:2020-10-30 19:23:34

标签: javascript express

我尝试使用Postman生成我的Web的一些后期交易,但是当我检查代码的post方法时,它将打印空的{}并将空的{}添加到我的列表中。我尝试使用中间件,但问题仍然存在。

这是我的代码。

// my code at restaurant.js
const express = require("express");
const router = express.Router();
const restaurants = require("../data")

router.get("/",(req,res) =>{
    res.json(restaurants);
}
)

router.get("/:id",(req,res) =>{
    const restaurantid = Number.parseInt(req.params.id,10);
    const restaurant = restaurants.find((restaurant) => restaurant.id === restaurantid);
    res.json(restaurant);
})

router.post("/",(req,res)=>{
    console.log(req.body);
    new_restaurant = req.body;
    restaurants.push(new_restaurant);
    res.json(new_restaurant);
}
)

module.exports = router;

//my code at index.js

const express = require("express");
const app = express();

const router = express.Router();

const restaurantsRouter = require("./routes/restaurants.js");

// Middleware
app.use(express.json());
app.use(express.urlencoded({extended:false}));
// Routes
app.use("/apis/restaurants",restaurantsRouter);

app.get("/",(req,res)=>{
    res.send("<h1>Hello Express</h1>");
});
app.listen(3000,()=> {
    console.log("Listening to port 3000");
})
module.exports = router;

1 个答案:

答案 0 :(得分:0)

传入的POST请求中的req.body为空的一般原因如下:

  1. 无论客户端正在发送请求,您都无法正确发送正文。
  2. 您无法通过与您要发送的正文数据类型匹配的请求来设置正确的内容类型。如果要发送JSON,则需要确保传入请求的内容类型为application/json
  3. 您没有安装正确的中间件或无法正常工作的中间件来匹配传入的内容类型,无法从传入的流中读取正文,对其进行解析并将解析的结果放入req.body中。
  4. 用于解析该内容类型的中间件未在Express中的路由处理程序之前注册。
  5. 其他一些中间件在中间件​​之前先“吃掉”主体,因此当到达JSON中间件时主体为空。

因此,您将需要处理POST请求,并消除所有这些可能性,直到发现问题为止。