Отправить пустое тело запроса - XMLHttpRequest на сервер Express - PullRequest
2 голосов
/ 10 июня 2019

Я пытаюсь получить доступ к телу из почтового запроса, отправленного с помощью XMLHttpRequest на экспресс-сервер.Однако тело запроса пустое, и я не могу понять, почему это так.

Я включил анализатор тела в приложение Express, и я попытался повторить некоторый код из ответов SO.Но я все равно ошибаюсь.

<script>
    const Http = new XMLHttpRequest();
    Http.open('post', 'localhost:3000');
    Http.send("sending something!");// this resolves to {} on the backend?
    Http.onload = function() {
     alert(Http.response); 
    };
</script>

Вот как я пытаюсь справиться с этим на моем экспресс-сервере

const express = require("express");
let app = express()
const bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({
    extended: true
}));
app.post("/post", (req, res) => {
    console.log("inside of post");
    console.log(req.body);
})

app.listen(3000)

Это журналы

inside of post
{}

Я ожидаю, что console.log() напечатает "отправка чего-либо!"что я пытаюсь отправить с запросом с Http.send("sending something!");.

1 Ответ

2 голосов
/ 10 июня 2019

Вы указали body-parser, чтобы проанализировать тело как кодированный в формате url формат, который будет работать, если вы передадите данные следующим образом:

Http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Http.send("param1=value1&param2=value2");

/* console output:
{ param1: 'value1', param2: 'value2' }
*/

В вашем случае передаваемые данные - это простая строка,который серверная часть интерпретирует как пустой JSON {}, так как он не может выполнить синтаксический анализ.

Чтобы это работало, попробуйте установить формат данных следующим образом

<script>
    const Http = new XMLHttpRequest();
    Http.open('post', 'localhost:3000');
    Http.setRequestHeader("Content-Type", "text/plain");
    Http.send("sending something!");
    Http.onload = function() {
     alert(Http.response); 
    };
</script>

И на экспресс-сервере:

const express = require("express");
let app = express();
const bodyParser = require("body-parser");
// app.use(
//   bodyParser.urlencoded({
//     extended: true
//   })
// );

app.use(bodyParser.text({ type: "text/plain" })); // use this instead

app.post("/post", (req, res) => {
  console.log("inside of post");
  console.log(req.body);
  return req.body;
});

app.listen(3000);

Тогда вы сможете прочитать сообщение "sending something!" в бэкэнде.Просто убедитесь, что вы устанавливаете правильный заголовок contentType в XMLHttpRequest при отправке, и вы используете тот же тип при разборе и в бэкэнде.

Для получения дополнительной информации о bodyParsers см. Этот doc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...