Я пытаюсь отправить строку с клиентской страницы на сервер, но сервер получает пустой объект. Вот мой клиентский код:
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.info("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);
Поскольку вы используете JSON для отправки данных от клиента и получения их на сервере, попробуйте добавить app.use(bodyParser.json())
на свой сервер. Вам больше не нужно JSON.parse()
req.body
.
Добавьте эти две строки в свой код
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
Чтобы получить доступ к телу запроса, вам нужно использовать bodyParser. И вам нужно явно указать вашему bodyParser форматы данных, которые вам нужно проанализировать. Теперь, подойдя к вашему решению, Заменять
app.use(bodyParser());
с участием
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
Начиная с экспресс 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);