我使用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"
所以这很好。那很好。但是,在这种情况下不起作用。
// 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"
如您所见,此api / users api运行正常,但我无法访问请求主体:(
谢谢您的帮助!
答案 0 :(得分:1)
在第一个示例中,您使用以下行导入body-parser
:
const bodyParser = require("body-parser");
然后启用它:
app.use(bodyParser.json());
这两项都是必需的,以便req.body
存在并包含您期望的-从请求流中获取的已解析JSON对象。
在第二个示例中,两行均缺失,因此req.body
为undefined
。您需要将它们添加到样本中,然后它将起作用。
请注意,req.body
不是由Express本身提供的,而是由body-parser
中间件提供的扩展,因此您必须安装,导入并实际上use
有关如何使用body-parser
的示例,请参见其文档,Express/Connect top-level generic部分或Express route-specific部分。
答案 1 :(得分:0)
您可以尝试使用body-parser或multer中间件,希望它对您有帮助
npm install body-parser --save
然后在您的代码中完成
var bodyParser = require('body-parser')
var app = express()
解析应用程序/ x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
解析应用程序/ json
app.use(bodyParser.json())
或
如果您的身体解析器不起作用,请尝试使用兼容的中间件
var express = require('express')
var app = express()
var multer = require('multer')
var upload = multer()
app.post('/profile', upload.none(), function (req, res, next) {
// req.body contains the text fields
})