最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

请求正文未定义

IT培训 admin 2浏览 0评论

请求正文未定义

我使用Express.js来制作api。

我面临的问题是访问请求的主体。

当api在server.js上时,我可以访问正文。

// backend/server.js
const express = require("express");
const app = express();
const bodyParser = require("body-parser");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post("/hello", (req, res) => {
  console.log(req.body);
});

postman post request to "/hello"

successfully working api

所以这很好。那很好。但是,在这种情况下它不起作用。

// backend/server.js
app.use(require("./routes"));


// backend/routes/index.js
const express = require("express");
const router = express.Router();

router.use("/api", require("./api"));

module.exports = router;


// backend/routes/api/index.js
const express = require("express");
const router = express.Router();

router.use("/users", require("./users"));

module.exports = router;


// backend/routers/api/users.js
const router = require("express").Router();
router.post("/", auth.optional, (req, res, next) => {
    console.log("hello");
    console.log(req.body);
}

failed postman post request to "/api/users"

failed api

如你所见,这个api / users api运行正常,但我无法访问请求体:(

谢谢您的帮助!

回答如下:

在第一个示例中,您使用以下行导入body-parser

const bodyParser = require("body-parser");

然后你启用它:

app.use(bodyParser.json());

两者都是必需的,以便req.body存在,并包含您所期望的 - 从请求流中获取的已解析的JSON对象。

在你的第二个例子中,两条线都缺失,因此req.bodyundefined。您需要将它们添加到您的样品中,然后它才会起作用。

请注意,req.body不是由Express本身提供的,而是由body-parser中间件提供的扩展,因此你必须安装它,导入它,实际上use它。

有关如何使用body-parser的示例,请参阅其文档,Express/Connect top-level generic部分或Express route-specific部分。

请求正文未定义

我使用Express.js来制作api。

我面临的问题是访问请求的主体。

当api在server.js上时,我可以访问正文。

// backend/server.js
const express = require("express");
const app = express();
const bodyParser = require("body-parser");

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

app.post("/hello", (req, res) => {
  console.log(req.body);
});

postman post request to "/hello"

successfully working api

所以这很好。那很好。但是,在这种情况下它不起作用。

// backend/server.js
app.use(require("./routes"));


// backend/routes/index.js
const express = require("express");
const router = express.Router();

router.use("/api", require("./api"));

module.exports = router;


// backend/routes/api/index.js
const express = require("express");
const router = express.Router();

router.use("/users", require("./users"));

module.exports = router;


// backend/routers/api/users.js
const router = require("express").Router();
router.post("/", auth.optional, (req, res, next) => {
    console.log("hello");
    console.log(req.body);
}

failed postman post request to "/api/users"

failed api

如你所见,这个api / users api运行正常,但我无法访问请求体:(

谢谢您的帮助!

回答如下:

在第一个示例中,您使用以下行导入body-parser

const bodyParser = require("body-parser");

然后你启用它:

app.use(bodyParser.json());

两者都是必需的,以便req.body存在,并包含您所期望的 - 从请求流中获取的已解析的JSON对象。

在你的第二个例子中,两条线都缺失,因此req.bodyundefined。您需要将它们添加到您的样品中,然后它才会起作用。

请注意,req.body不是由Express本身提供的,而是由body-parser中间件提供的扩展,因此你必须安装它,导入它,实际上use它。

有关如何使用body-parser的示例,请参阅其文档,Express/Connect top-level generic部分或Express route-specific部分。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论