2012-04-04 16 views
198

Wysyłam następujący ciąg JSON do mojego serwera.Jak korzystać z danych JSON POST w aplikacji Express

(
     { 
     id = 1; 
     name = foo; 
    }, 
     { 
     id = 2; 
     name = bar; 
    } 
) 

Na serwerze mam to.

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'); 
    }); 
}); 

Kiedy wysyłam ciąg, pokazuje, że otrzymałem odpowiedź 200, ale te dwie pozostałe metody nigdy nie działają. Dlaczego?

Odpowiedz

258

Myślę, że używasz obiektu o rozmiarze response z tym z request.

Obiekt response służy do wysyłania odpowiedzi HTTP z powrotem do klienta wywołującego, podczas gdy użytkownik chce uzyskać dostęp do treści request. Zobacz to answer, które zawiera wskazówki.

Jeśli używasz poprawnego JSON i umieszczenie go z Content-Type: application/json, wówczas można użyć bodyParser middleware do analizowania treści żądania i umieść wynik w request.body trasy.

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); 

test wzdłuż linii:

$ curl -d '{"MyKey":"My Value"}' -H "Content-Type: application/json" http://127.0.0.1:3000/ 
{"MyKey":"My Value"} 

aktualizowana Express, parser 4+

ciała został rozdzielony na jego własnym pakietem npm po v4, wymaga oddzielnego zainstalowania 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); 
+0

Jak mogę uzyskać dostęp do „MyKey” dostać „My Value”? – neuromancer

+12

'request.body.MyKey' –

+0

Dlaczego to nie działa dla console.log (" request = "+ request.body)? – neuromancer

176

Dla ekspresowego v4 +

zainstalowanie analizatora treści z 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() 
}) 
+14

dlaczego ciągle zabierają rzeczy, z których wszyscy korzystają? – light24bulbs

+9

@ light24bulbs Więc to (Express) będzie bardziej chude i średnie dla tych, którzy tego nie używają/nie potrzebują. – andyengle

+5

@andyengle To ma sens. Ale myślę, że praktycznie każdy używa analizy żądania. To wydaje mi się główną cechą. – light24bulbs

6

Czasami nie trzeba bibliotek stron trzecich do analizowania JSON z tekstem. Czasami wszystko, czego potrzebujesz to następujące polecenie JS, spróbuj go najpierw:

 const res_data = JSON.parse(body); 
+3

Pierwotne pytanie dotyczy parsowania JSON z komunikatu POST w frameworku Express. Bez oprogramowania pośredniego BodyParser dane JSON nie będą istnieć we właściwości body obiektu żądania. – ThisClark

+1

Znalazłem to przydatne podczas analizowania odpowiedzi serwera. Dzięki! –

+1

Dziękuję Hasan, doceniam twój komentarz. Pomogło mi to, gdy szukałem rozwiązania i natknąłem się na ten post. Nie wiem, czy działa we wszystkich przypadkach, ale na pewno działa w niektórych i jest lepszym rozwiązaniem niż korzystanie z biblioteki osób trzecich. – xims

Powiązane problemy