2012-12-19 31 views
5

Bez względu na to, jakie połączenie z req.params/req.query/req.body i $ .post ({..} używam, nie jestem w stanie wyodrębnić danych JSON z mojego żądania postu Jquery w ekspresowym .Wysyłanie danych jquery do Express

to mój jQuery:

$.post("/mail", {email : "[email protected]", name : "[email protected]"}); 

próbowałem również różne permutacje:

$.ajax({type: "POST", url: "/mail", dataType :"json", data : 
{email : "[email protected]", name : "[email protected]"}}); 

to jest moje node.js exp ress kod:

app.post("/mail", function(req, res) { 
    console.log(req.body.name); 
    console.log(req.route); 
    console.log("params1: " + req.param.params); 
.... 

Próbowałem nieskończone sposoby dostępu do danych e-mail i nazwę bez powodzenia. Byłbym zaskoczony, gdyby rozwiązanie było prostą modyfikacją wymagającą repozytorium/req.params, ale wszystko jest możliwe! Dane właśnie tam nie ma! (Nie pojawia się w moim url albo - wszystko co widzę to localhost: 1337)

req.body/req.params/req.param.params/req.params wszystko wrócićniezdefiniowanej i req. zapytanie zwraca[].

req.route powraca:

{ path: '/mail', 
    method: 'post', 
    callbacks: [ [Function] ], 
    keys: [], 
    regexp: /^\/mail\/?$/i, 
    params: [] } 

próbowałem dodając:

app.use(express.bodyParser()); 

Ale, co prawda, nie w pełni zrozumieć jego cel. Każda pomoc jest bardzo doceniana.

Wesołych świąt! // Sam

+0

Może to ci trochę pomoże? http://stackoverflow.com/questions/5710358/how-to-get-post-query-in-express-node-js –

+0

Warstwowe oprogramowanie 'bodyParser' inicjuje' req.body' z ciała POST, więc naprawdę tego potrzebujesz. Upewnij się, że używasz go przed zamontowaniem tras (to znaczy zanim zrobisz 'app.use (app.router)' lub twoje pierwsze wywołanie 'app.get' /' app.post' etc). –

+0

Co powiedział Linus, upewnij się, że w Twojej konfiguracji bodyParser jest ustawiony PRZED routingiem. – leepowell

Odpowiedz

1

Musisz dodać bodyParser() middleware przed wszelkimi drogami, które go używają, tak jak poniżej:

app.use(express.bodyParser()); 

app.post('/mail', function(req, res) { 
    console.log(req.body); // the body attribute will be created by the bodyParser() 
}); 

drodze prace Express jest, że każdy wniosek jest spływał za pośrednictwem oprogramowania pośredniczącego i tras w kolejności, w której są zadeklarowane. Ponieważ oprogramowanie pośrednie bodyParser() jest teraz zadeklarowane przed trasą, będzie miało szansę przeanalizować treść żądania w ładnym formacie JSON, wstawić tę przeanalizowaną wartość do req.body, a następnie przekazać sterowanie do następnej trasy/oprogramowania pośredniego; w przeciwnym razie req.body po prostu nie istnieje.

+0

ładne, dziękuję za tę odpowiedź! –

Powiązane problemy