Проблема чтении JSON на сервере node.js

198
14 апреля 2017, 23:06

Сервер не распознает JSON, приходящий от клиента. Из этого поля <input type="text" id="message"> я отправляю данные посредством XMLHttpRequest:

var xhr = new XMLHttpRequest();
 xhr.open("POST", "/publish", true);
var data = JSON.stringify({message: message.value});
 xhr.send(data);

Вот что на сервере (использую Express):

var express = require('express');
var app = express();
/*   code     */
var bodyParser = require('body-parser');  // Использую модуль body-parser
app.use(bodyParser.json());               // для чтения request.body
app.post("/publish", function(req, res){
var msg = req.body.message;
    chat.publish(msg);
    console.log(msg);
    res.send(msg);
});

На клиенте console.log говорит, что данные из input превращаются правильно. Т.е. если я введу "something", то строка, которая будет отправляться на сервер, имеет вид {"message":"something"}. На сервере console.log говорит, что undefined. НО. Отправляя данные, используя стороннюю утилиту для запросов (Postman), такого же вида {"message":"something"}, сервер распознает message. Что может быть не так?

Answer 1

Body-parser обрабатывает (или не обрабатывает) запросы на основании значения заголовка Content-Type.

Для JSON запросов этот заголовок должен принимать значение:

Content-Type: application/json

Вот пример того, как можно задать правильное значение этого заголовка на клиенте:

var xhr = new XMLHttpRequest();
xhr.open("POST", "/publish", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify({message: message.value}));
READ ALSO
Рендринг React компонентов через PHP

Рендринг React компонентов через PHP

Всем привет! На сервере(nodejs) есть React который рендрит компоненты и отдает их клиентуЕсли это делать на прямую(nodejs-браузер) то проблем нет

201
Как использовать setInterval с onmousemove [дубликат]

Как использовать setInterval с onmousemove [дубликат]

На данный вопрос уже ответили:

184
Помогите разобраться с кодом (Google Chart)

Помогите разобраться с кодом (Google Chart)

Здравствуйте! Нашел подходящий для себя график на Google Chart, не могу понять как задавать значения даты, нужно выводить числомесяц

360