Я думаю, что вы смешиваете использование response
объекта с использованием request
.
response
Объект для отправки ответа HTTP обратно к вызывающему клиенту, в то время как вы хотели получить доступ к телу из request
. Смотрите этот ответ, который дает некоторые рекомендации.
Если вы используете действительный JSON и размещаете его с помощью POST 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+
После v4 парсер тела был разбит на собственный пакет npm, требует отдельной установки 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()
доступно новое промежуточное программное обеспечение.
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);
request.body.MyKey
toString()
объект. Взгляните на документацию по узлуconsole.log
, поскольку он проверяет объект и возвращает строковое представление.console.log('request =' + JSON.stringify(request.body))
console.log()
автоматически раскроет объект (черезutil.inspect()
), так что это будет работать:console.log("with request", request.body);
Для Express v4 +
установить body-parser с npm.
https://www.npmjs.org/package/body-parser#installation
источник
Иногда вам не нужны сторонние библиотеки для анализа JSON из текста. Иногда все, что вам нужно, это следующая команда JS, попробуйте сначала:
источник
body
Для тех, кто получает пустой объект в
req.body
Я забыл установить
headers: {"Content-Type": "application/json"}
в запросе. Изменение решило проблему.источник
text/json
и получаю{}
как ответ. Тотальный надзор с моей стороны. Очень полезно.@Daniel Thompson упоминает, что он забыл добавить {"Content-Type": "application / json"} в запросе . Он смог изменить запрос, однако, изменение запросов не всегда возможно (мы работаем над сервером здесь).
В моем случае мне нужно было принудительно проанализировать тип контента: text / plain как json.
Если вы не можете изменить тип содержимого запроса, попробуйте использовать следующий код:
Вместо глобального использования express.json () я предпочитаю применять его только там, где это необходимо, например, в запросе POST:
источник
Этот app.use (express.json) теперь позволяет читать объект JSON входящего сообщения.
источник