Почему тело является пустым объектом, Express сервер, метод post (2020) - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть простой сервер:

const bodyParser = require('body-parser');

const app = express();
const port = process.env.PORT || "8080";

app.use(bodyParser.json());

app.listen(port, () => {
  console.log(`Listening to requests on http://localhost:${port}`);
});

app.post("/", (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.send(JSON.stringify(req.body));
  console.log("»>", req.body)
});

отправить запрос с localhost: 3000

fetch('http://localhost:8080/', {
  "method": "post",
  "Allow-Control-Allow-Origin": "*",
  "mode": "cors",
  "Content-Type": "application/json",
  "body": JSON.stringify({"1":"sss"})
});

Это работает, но req.body - {} - почему? Любые предложения.

1 Ответ

0 голосов
/ 11 апреля 2020

Вы неправильно указали fetch.

Запросите заголовки go в свойстве headers.

Поскольку вы поместили Content-Type в неправильное место, вы отправляете запрос с Content-Type: text/plain (по умолчанию для строковых тел), поэтому синтаксический анализатор JSON игнорирует его (а у вас нет настроен синтаксический анализатор основного текста).

(Кроме того, Allow-Control-Allow-Origin начинается с Access и является заголовком response , в нем нет места для запроса).

fetch('http://localhost:8080/', {
  "method": "post",
  "mode": "cors",
  headers: {
      "Content-Type": "application/json",
  },
  "body": JSON.stringify({"1":"sss"})
});

Как только вы исправите это, вы получите сообщение об ожидаемой ошибке для неправильной конфигурации CORS. Вы только настроили свою конечную точку для обработки простых запросов, но отформатированные запросы JSON предварительно просвечиваются. Документация для модуля cors для express объясняет, как настроить его для предварительно выданных запросов .

...