Сервер не распознает 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.
Что может быть не так?
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}));
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости