Я публикую эту тему по проблеме, предложенной в заголовке. Я видел несколько других вопросов, касающихся пустых тел запросов, но ни один из них мне не помог. Надеюсь, если я опубликую свой собственный код, кто-то сможет дать мне хороший совет.
В основном у меня есть клиент, использующий javascript для отправки CORS HTTPRequests на сервер Node.js. Обычно эти HTTPRequests представляют собой записи объектов JSON.
Вот пример кода клиента.
username = document.getElementById("username").value;
password = document.getElementById("password").value;
var str = '{"name":"'+username+'","pass":"'+password+'"}';
var req = new XMLHttpRequest();
req.open("POST","http://xxxx:8099/register",true)
req.setRequestHeader("Content-type", "application/json");
req.onreadystatechange = function()
{
//irrelevant
}
req.send(str);
}
Вот код сервера.
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
extended: true
}));
// parse application/json
app.use(bodyParser.json());
app.listen(8099);
app.post("/register", function (req, res) {
console.log(req.body); // populated!
console.log(req.body.name);
res.send(200, req.body);
});
Теперь вот результаты, которые я получаю:
Если я устанавливаю Content-type запроса в application/json, то на сервере я получаю пустое тело запроса.
Если я установлю для Content-type запроса значение application/x-www-form-urlencoded, то получу заполненное тело, например { '{"name":"usernamtest","pass":"123"}': ' ' }.
Однако, если я попытаюсь напечатать req.body.name, я получу неопределенное значение, что означает, что синтаксический анализатор тела неправильно проанализировал тело в JSON.
Как я решу это? Я просто хочу получить объект JSON этих свойств в примере.
Для тех, кто читает это, я благодарю вас за ваше время. Дополнения, Рикардо Феррейра да Силва