我正在尝试从客户端页面向服务器发送字符串,但是服务器接收到一个空对象。这是我的客户端代码:
fetch("/sugestions/sugestions.txt", {
method: "POST",
body: JSON.stringify({ info: "Some data" }),
headers: {
"Content-Type": "application/json; charset=utf-8"
}
})
.then(res => {
if (res.ok) console.log("Yay it worked!");
else window.alert("Uh oh. Something went wrong!\n" + res);
});
这是我的服务器端代码:
const express = require("express");
const url = require("url");
const fs = require("fs");
const bodyParser = require("body-parser");
const app = express();
const port = process.env.PORT || 8080;
app.set("view engine", "ejs");
app.use(bodyParser());
app.post("/sugestions/*", (req, res) => {
info = JSON.parse(req.body);
fs.appendFile(path("req").pathname, info.info, (err) => {
if (err) res.status(404).end();
else res.status(200).end();
});
});
app.listen(port);
以下是重要的路径函数:
const path = req => url.parse(`${req.protocol}://${req.get("host")}${req.originalUrl}`, true);
答案 0 :(得分:1)
要访问请求的正文,您需要使用bodyParser。并且您需要明确地告诉bodyParser您需要解析的数据格式。 现在来解决您的问题, 替换
xtick
使用
app.use(bodyParser());
答案 1 :(得分:0)
将这两行添加到您的代码中
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
答案 2 :(得分:0)
自Express 4.16.0起,您可以使用app.use(express.json());
从请求中获取json数据,您可以使用。不需要使用bodyparser和全部。
const express = require("express");
const url = require("url");
const fs = require("fs");
const bodyParser = require("body-parser");
const app = express();
const port = process.env.PORT || 8080;
app.set("view engine", "ejs");
app.use(express.json())// add this line
app.post("/sugestions/*", (req, res) => {
info = JSON.parse(req.body);
fs.appendFile(path("req").pathname, info.info, (err) => {
if (err) res.status(404).end();
else res.status(200).end();
});
});
app.listen(port);