Myślę, że łączysz użycie response
obiektu z tym request
.
response
Obiekt jest za wysłanie z powrotem odpowiedzi HTTP do klienta wywołującego, podczas gdy jesteś chcąc uzyskać dostęp do korpusu request
. Zobacz tę odpowiedź, która zawiera pewne wskazówki.
Jeśli używasz prawidłowego JSON i POSTINGujesz go Content-Type: application/json
, możesz użyć bodyParser
oprogramowania pośredniego do przeanalizowania treści żądania i umieszczenia wyniku na request.body
trasie.
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);
Testuj według:
$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/
{"MyKey":"My Value"}
Zaktualizowano dla Express 4+
Parser treści został podzielony na własny pakiet npm po wersji v4, wymaga osobnej instalacji 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);
Aktualizacja dla Express 4.16+
Począwszy od wersji 4.16.0 express.json()
dostępne jest nowe oprogramowanie pośrednie.
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()
obiekt. Spójrz na dokumentację węzła dlaconsole.log
, ponieważ to sprawdza obiekt i zwraca reprezentację ciągu.console.log('request =' + JSON.stringify(request.body))
console.log()
automatycznie skretyfikuje obiekt (viautil.inspect()
), więc zadziałałoby:console.log("with request", request.body);
Dla Express v4 +
zainstaluj body-parser z npm.
https://www.npmjs.org/package/body-parser#installation
źródło
Czasami nie potrzebujesz bibliotek stron trzecich do parsowania JSON z tekstu. Czasami wszystko, czego potrzebujesz, to następujące polecenie JS, spróbuj najpierw:
źródło
body
Dla tych, którzy wchodzą do pustego obiektu
req.body
Zapomniałem wpisać
headers: {"Content-Type": "application/json"}
prośbę. Zmiana rozwiązała problem.źródło
text/json
i odbierałem{}
jako odpowiedź. Całkowity nadzór z mojej strony. Bardzo pomocny.@Daniel Thompson wspomina, że zapomniał dodać do żądania {„Content-Type”: „application / json”} . Był w stanie zmienić żądanie, jednak zmiana żądań nie zawsze jest możliwa (tutaj pracujemy na serwerze).
W moim przypadku musiałem wymusić parsowanie content-type: text / plain jako json.
Jeśli nie możesz zmienić typu treści żądania, spróbuj użyć następującego kodu:
Zamiast globalnie używać express.json (), wolę stosować go tylko w razie potrzeby, na przykład w żądaniu POST:
źródło
To app.use (express.json) pozwoli ci teraz odczytać przychodzący obiekt JSON
źródło