Как использовать данные JSON POST в приложении Express
Я отправляю следующую строку JSON на свой сервер.
(
{
id = 1;
name = foo;
},
{
id = 2;
name = bar;
}
)
На сервере у меня это.
app.post('/', function(request, response) {
console.log("Got response: " + response.statusCode);
response.on('data', function(chunk) {
queryResponse+=chunk;
console.log('data');
});
response.on('end', function(){
console.log('end');
});
});
Когда я отправляю строку, это показывает, что я получил ответ 200, но эти два других метода никогда не запускаются. Почему это?
Ответы
Ответ 1
Я думаю, что вы связываете использование объекта response
с request
.
Объект response
предназначен для отправки ответа HTTP обратно вызывающему клиенту, тогда как вы хотите получить доступ к телу request
. Смотрите этот ответ, который дает некоторые рекомендации.
Если вы используете допустимый JSON и размещаете его с Content-Type: application/json
, вы можете использовать промежуточное программное обеспечение bodyParser
для анализа тела запроса и помещения результата в request.body
вашего маршрута.
var express = require('express')
, app = express.createServer();
app.use(express.bodyParser());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
Тест по линии:
$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}
Обновлен для экспресса 4+
Анализатор тела был расколот из в нее собственный пакет NPM после v4, требует отдельной установки npm install body-parser
var express = require('express')
, bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
Обновление для Express 4. 16+
Начиная с версии 4.16.0, доступно новое промежуточное программное обеспечение express.json express.json()
.
var express = require('express');
var app = express();
app.use(express.json());
app.post('/', function(request, response){
console.log(request.body); // your JSON
response.send(request.body); // echo the result back
});
app.listen(3000);
Ответ 2
Для Express v4 +
установить body-parser из npm.
$ npm install body-parser
https://www.npmjs.org/package/body-parser#installation
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// parse application/json
app.use(bodyParser.json())
app.use(function (req, res, next) {
console.log(req.body) // populated!
next()
})
Ответ 3
Иногда вам не нужны сторонние библиотеки для разбора JSON из текста.
Иногда вам нужна следующая команда JS, сначала попробуйте:
const res_data = JSON.parse(body);
Ответ 4
Для тех, кто получает пустой объект в req.body
Я забыл установить headers: {"Content-Type": "application/json"}
в запросе. Изменение решило проблему.
Ответ 5
const express = require('express');
let app = express();
app.use(express.json());
Ответ 6
@Даниэль Томпсон упоминает, что он забыл добавить {"Content-Type": "application/json"} в запросе. Он смог изменить запрос, однако, изменение запросов не всегда возможно (мы работаем над сервером здесь).
В моем случае мне нужно было выполнить синтаксический анализ типа контента: text/plain как json.
Если вы не можете изменить тип содержимого запроса, попробуйте использовать следующий код:
app.use(express.json({type: '*/*'}));
Вместо глобального использования express.json() я предпочитаю применять его только там, где это необходимо, например, в запросе POST:
app.post('/mypost', express.json({type: '*/*'}), (req, res) => {
// echo json
res.json(req.body);
});