2012-03-28 11 views
22

Pracowałem nad prostym interfejsem API, używając Node.JS i ponownie dokonałem tej operacji i miałem wszystko dobrze pod względem odbierania parametrów za pośrednictwem req.params.fieldname. Zainstalowałem CouchDB i Cradle, aby rozpocząć próby wrzucenia tych parametrów do bazy danych, ale po tym, jak wszystko zainstalowane, req.params zaczęło wracać puste!Obiekt żądania węzła (ekspresowe) pusty

Powinienem używać Expressu na początek z innych powodów, więc próbowałem przejść do tego, aby sprawdzić, czy mogę go uruchomić, ale nie ma takiego szczęścia.

var express = require('express'); 
var app = express.createServer(); 

app.configure(function(){ 
app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
}); 

app.post('/', function(req, res){ 
    res.send(req.body); 
}); 

app.listen(8080, function() { 
    console.log('Printomatic listening at', app.url); 
}); 

Próbowałem wiele odmian, ale bez względu na to, co req.body wraca puste. Używam konsoli http do przetestowania i wysyłania rzeczy tak prostych, jak POST / z zawartością {"name":"foobar"}

Jestem tak sfrustrowany, że w tym momencie zaczynam się zastanawiać, czy coś zepsułem podczas instalacji Cradle/CouchDB (która zostały zainstalowane z odpowiednio NPM i Homebrew). Jakakolwiek pomoc byłaby bardzo doceniona, ponieważ jest to trochę zależne od czasu. Dzięki za pomoc z góry!

+0

co się stanie, jeśli spróbujesz app.get ("/", funkcja (req, res) {res.send ("Hello World");}, a następnie wykonaj prośbę o uzyskanie ?? – bryanmac

Odpowiedz

69

Wspominasz, że publikujesz dane JSON ({"name": "foobar"}). Upewnij się, że wysyłasz z tego Content-Type: application/json, lub bodyParser nie będzie analizować.

Np .:

$ curl -d 'user[name]=tj' http://local/ 
$ curl -d '{"user":{"name":"tj"}}' -H "Content-Type: application/json" http://local/ 

To dlatego bodyParser analizuje application/json, application/x-www-form-encoded i multipart/form-data i wybiera, które parser do zastosowana w oparciu o Content-Type.

+4

Czuję się jak idiota. Używałem konsoli http i wydaje mi się, że z jakiegoś powodu zmieniły się nagłówki! Dziękuję! –

+2

Używałem klienta RMS Postmana i działało, gdy użyłem danych formularza, ale nie przy wysyłaniu na surowo. Ustawienie typu zawartości w nagłówku naprawiło to. Dzięki –

+1

Dziękuję Nikhil! Miałem ten sam problem z Listonosem, i musimy ustawić nagłówek: Content-Type (bez dwukropka) i Wartość: application/json –