我正在尝试学习节点 js。我 tryng 通过前端从 axios 发出一个 post 请求,但是节点 js 用空对象响应。
这里是代码
节点 js
var express = require("express");
var app = express();
var cors = require("cors");
app.use(cors());
var bodyPr = require("body-pr");
var urlencodedPr = bodyPr.urlencoded({ extended: false });
// This responds with "Hello World" on the mepage
app.get("/", function (req, res) {
console.log("Got a GET request for the mepage");
res.send("Hello GET");
});
app.post("/", urlencodedPr, function (req, res) {
console.log(req.body);
res.send("Hello GET");
});
var server = app.listen(8081, function () {
var st = server.address().address;
var port = server.address().port;
console.log("Example app listening at http://%s:%s", st, port);
});
前端
axios.post("http://localst:8081/", { body: "dan" })
.then((e) => console.log(e))
响应是一个空对象。
我该怎么办?
默认情况下,您的 axios 代码:
axios.post("http://localst:8081/",{body:"dan"}).then((e) => console.log(e))
将 POST 请求的正文作为 JSON 发送。直接从axios doc引用。
默认情况下,axios 将 JavaScript 对象序列化为 JSON
因此,您需要 Express 服务器上的 JSON 中间件来读取和解析该 JSON 正文。如果没有正在寻找特定内容类型的中间件,POST 请求的正文将不会被读取或解析,并且req.body
将保持为空。
app.post('/', express.json(), function (req, res) {
console.log(req.body);
res.send('Hello POST');
});
请注意,不需要单独加载 body-pr 模块,因为它是 Express 内置的。
或者,如果您希望将请求作为application/x-www-form-urlencoded
content-type 发送,那么您需要以这种方式对数据进行编码,并将其作为 axios 请求中的数据发送,并适当地设置 content-type。
这些请求体可以由express.urlencoded()
中间件以与express.json()
相同的方式处理。
您应该使用 bodyPr.json(),以获取在 req.body 中发送的数据。
var bodyPr = require('body-pr');
app.use(bodyPr.json());
我们应该在使用中间件以以下方式访问它之前解析请求正文
app.use(bodyPr.json());
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(25条)