2013-11-26 5 views
6

W przypadku najnowszych wersji programu Express zalecenie (przekazywane za pomocą komunikatu debugowania) oznacza zaprzestanie używania oprogramowania pośredniego bodyParser. Trochę czytam i wygląda na to, że bodyParser jest opakowaniem dla middlewareware json i urlencoded - a oto najnowsza wersja Expressu (3.4.4) używa tych 2 zamiast bodyParser poza zestawem - wspaniały, dobrze?Jak zdobyć pola POST w Expressie, bez korzystania z middleware bodyParser?

Ale teraz nie mogę dostać się na moje pola. req.body jest niezdefiniowany. Oto mój kod do przesłania formularza JS (tylko pola tekstowe, brak plików). Czy ktoś mógłby mi powiedzieć, którą właściwość/funkcję req mogę użyć, aby uzyskać wartości?

var formData = new FormData($('#myForm')[0]); 
$.ajax({ 
    url: '/myurl', 
    cache: false, 
    contentType: false, 
    processData: false, 
    data: formData, 
    type: 'POST', 
    success: function(data) { 
     console.log(data); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.error('Error occured: ' + errorThrown); 
    } 
}); 
+0

Zamiast tego można użyć [Busboy] (https://github.com/mscdex/busboy). – adeneo

+1

Nie byłem świadomy ostrzeżenia przed 'bodyParser()'. Był jeden dla 'multipart()', który jest przestarzały. Tak więc możesz użyć pozostałych 2 bezpośrednio: 'app.use (express.json()); app.use (express.urlencoded()); '. –

+0

Dzięki @adeneo, ale czy istnieje sposób na uzyskanie wartości bez uwzględnienia innego zasobu? –

Odpowiedz

13

Kwestia jest taka, że ​​podczas wysyłania FormData The Content-Type będzie multipart/form-data.

Choć używasz express.json() i express.urlencoded(), każdy z nich działa tylko na poszczególnych Content-Type s - application/json i application/x-www-form-urlencoded odpowiednio.

Program Express/Connect usunie wbudowaną obsługę dla multipart() i analizuje zawartość multipart/form-data w przyszłości ze względów bezpieczeństwa. Oni zamiast recommend using:

Tak, dla przyszłego wsparcia FormData i multi-part w ogóle z Ekspres/Connect, Będą musieli użyć zależności addycji.

+0

Zmieniono wpis Ajax post contentType na "application/json", wysłano pola jako poprawny json - a teraz działa! Twoje zdrowie! –