Тело POST-запроса на сервере пустое - PullRequest
0 голосов
/ 13 октября 2019

Я пытаюсь сделать AJAX-запрос от клиентского javascript с использованием XMLHttpRequest. Ниже приведен код для этого:

document.getElementById('myform').onsubmit=function(){
    var http = new XMLHttpRequest();
    var text = document.getElementById('myinput').value;
    console.log(text);
    http.onreadystatechange = function(){
        if(http.readyState === 4 && http.status === 200){
            location.reload();
        }
    };
    http.open('POST','/todo',true);
    http.setRequestHeader("Content-Type", "application/json");
    var obj = {
        item:text
    };
    http.send(JSON.stringify(obj));
}

Это прекрасно работает без каких-либо ошибок. Однако на стороне сервера, когда я пытаюсь записать тело запроса на консоль, оно отображается как пустой объект. Может кто-то помочь мне с этим? Ниже приведен код на стороне сервера для обработки почтового запроса:

app.post('/todo',urlencodedParser, function(req,res){
    console.log(req.body); // This logs an empty object to the console!
    newItem = Todo(req.body);
    newItem.save(function(err,data){
        if(err) throw err;
        res.json(data);
    });
});

1 Ответ

0 голосов
/ 14 октября 2019

Кодировка JSON и кодировка URL различаются.

Если вы хотите отправить данные в кодировке JSON, вы должны получить их с соответствующим промежуточным программным обеспечением:

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

app.post('/todo', bodyParser.json(), function(req,res){
    console.log(req.body); // This logs an empty object to the console!
    newItem = Todo(req.body);
    newItem.save(function(err,data){
        if(err) throw err;
        res.json(data);
    });
});

Скорее всегоработал с jQuery, потому что urlencoding является поведением по умолчанию для $.post.

...