Req.body - пустой node.js и экспресс - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь отправить строку со страницы клиента на сервер, но сервер получает пустой объект.Вот мой код на стороне клиента:

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);

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Для доступа к телу запроса вам нужно использовать bodyParser. И вам нужно явно сообщить вашему bodyParser о форматах данных, которые вам нужно проанализировать. Теперь перейдем к вашему решению, Заменить

app.use(bodyParser());

с

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
0 голосов
/ 08 апреля 2019

Начиная с 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);
0 голосов
/ 08 апреля 2019

Добавьте эти две строки в ваш код

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...