Отправка данных JSON на сервер с помощью Expressjs

У меня есть html-форма с несколькими полями, которые я упаковываю в JSON, и мне нужно отправить это на сервер. У меня есть следующий код на переднем конце:

var data = {
//data here
};
var xhr = new XMLHttpRequest();
xhr.open("POST","localhost:8000/add",true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(data);

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

app.post('/add', function(req,res) {
  console.log(req.body.name);
  res.json(req.body.name);
});

Он ничего не отправляет; что мне нужно сделать, чтобы заставить его отправить JSON?


person Josh Gordon    schedule 03.08.2018    source источник
comment
Вы используете парсер тела?   -  person Mark    schedule 03.08.2018
comment
Вы пытались проверить req.body (console.log(req.body);), чтобы узнать, получили ли вы какие-либо данные или нет?   -  person Ezzat Elbadrawy    schedule 04.08.2018
comment
Возможный дубликат Express.js POST req.body пуст   -  person Charlie Fish    schedule 04.08.2018


Ответы (3)


Вам нужно использовать body-parser для получения значений в req.body

Из документов npm

var express = require('express')
var bodyParser = require('body-parser')

var app = express()

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))

// parse application/json
app.use(bodyParser.json())
person Aritra Chakraborty    schedule 03.08.2018
comment
Я включил их, и все равно ничего не отправляется. - person Josh Gordon; 04.08.2018

Вы не обрабатываете ответ на почтовый запрос, а также убедитесь, что используете парсер тела на бэкэнде. Таким образом, ваш интерфейсный код должен быть таким:

var data = {name:"xyz"};
var json = JSON.stringify(data);
var xhr = new XMLHttpRequest();
xhr.open("POST","localhost:8000/add",true);
xhr.setRequestHeader('Content-type','application/json; charset=utf-8');
xhr.onload = function () {
    var data = JSON.parse(xhr.responseText);
   if (xhr.readyState == 4 && xhr.status == "201") {
    console.log(data);
  } else {
    console.log(data);
  }
}
xhr.send(json);

И ваш код на стороне сервера должен быть закодирован следующим образом:

 var express = require('express')
   var bodyParser = require('body-parser')

   var app = express();
   // parse application/json
   app.use(bodyParser.json())

  // parse application/x-www-form-urlencoded
    app.use(bodyParser.urlencoded({ extended: false }));

    app.post('/add', function(req,res) {
      console.log(req.body.name);
      res.status(201).json(req.body.name);
  });
person Rahul Kinkar    schedule 04.08.2018

Я протестировал его с помощью этого кода, и он у меня получился:

Код клиента такой же, как ваш код.

Код сервера:

const express = require('express');
const app = express();

app.use(express.json());

app.post('/add', function(req,res) {
  console.log(req.body.name);
  res.json(req.body.name);
});
person Ezzat Elbadrawy    schedule 04.08.2018