Вы указали body-parser
, чтобы проанализировать тело как кодированный в формате url формат, который будет работать, если вы передадите данные следующим образом:
Http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Http.send("param1=value1¶m2=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