Oto moja prosta forma:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Oto mój kod Express.js /Node.js:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Próbowałem sReq.query.email
lub sReq.query['email']
lub sReq.params['email']
itp żaden z nich pracy. Wszyscy wracają undefined
.
Po zmianie na połączenie Get działa, więc .. masz jakiś pomysł?
javascript
node.js
post
express
murvinlai
źródło
źródło
bodyParser()
z odpowiedzi tutaj, powinien również przeczytać odpowiedźOdpowiedzi:
Wszystko się zmieniło od uruchomienia Express 4.16.0 , możesz teraz używać
express.json()
iexpress.urlencoded()
tak jak w Express 3.0 .To było inne, począwszy od Express 4.0 do 4.15 :
i wtedy:
Reszta jest jak w Express 3.0 :
Najpierw musisz dodać oprogramowanie pośrednie, aby przeanalizować dane postu treści.
Dodaj jeden lub oba z następujących wierszy kodu:
Następnie w swoim module obsługi użyj
req.body
obiektu:Pamiętaj, że użycie
express.bodyParser()
nie jest zalecane....jest równa:
Istnieją obawy dotyczące bezpieczeństwa
express.multipart()
, dlatego lepiej jest jawnie dodać obsługę określonych typów kodowania, których potrzebujesz. Jeśli potrzebujesz kodowania wieloczęściowego (na przykład w celu obsługi przesyłania plików), powinieneś to przeczytać .źródło
content-type
ustawiony nagłówek, na przykład:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
wyodrębnia JSON, dane zakodowane w adresie URL i dane wieloczęściowe wreq.body
obiekcie.app.use(require('body-parser').json())
wystarczy tylko linia. Następnie możesz odczytać dane json z obiektu treści żądania, tj.req.body
Z definicji trasy.Kwestia bezpieczeństwa przy użyciu express.bodyParser ()
Podczas gdy wszystkie inne odpowiedzi obecnie zalecane przy użyciu
express.bodyParser()
oprogramowania pośredniczącego, to faktycznie owinięcie wokółexpress.json()
,express.urlencoded()
iexpress.multipart()
middleware ( http://expressjs.com/api.html#bodyParser ). Parsowanie treści żądań formularzy odbywa się przezexpress.urlencoded()
oprogramowanie pośrednie i jest to wszystko, czego potrzebujesz do ujawnienia danych formularza nareq.body
obiekcie.Ze względu na obawy dotyczące bezpieczeństwa związane z tym, w jaki sposób
express.multipart()
/connect.multipart()
tworzy pliki tymczasowe dla wszystkich przesyłanych plików (i nie są usuwane), zaleca się teraz, aby nie używaćexpress.bodyParser()
opakowania, ale zamiast tego używać tylko potrzebnych plików pośrednich.Uwaga:
connect.bodyParser()
wkrótce zostanie zaktualizowany, aby obejmował tylkourlencoded
ijson
wydanie Connect 3.0 (które rozszerza Express).Krótko mówiąc, zamiast ...
...powinieneś użyć
a jeśli / kiedy musisz obsługiwać formularze wieloczęściowe (przesyłanie plików), użyj biblioteki innej firmy lub oprogramowania pośredniego, takiego jak multiparty, busboy, dicer itp.
źródło
multipart()
jako częśćbodyParser()
,bodyParser()
ponownie stanie się „bezpieczny”, ale będziesz musiał jawnie włączyć obsługę wielu części za pomocą biblioteki innej firmy.Uwaga : ta odpowiedź dotyczy Express 2. Zobacz tutaj Express 3.
Jeśli używasz Connect / Express, powinieneś użyć oprogramowania pośredniego bodyParser : Jest to opisane w przewodniku Expressjs .
Oto oryginalna wersja tylko do połączenia:
Zarówno kwerenda, jak i treść są analizowane przy użyciu obsługi parametrów w stylu Rails (
qs
), a nie biblioteki niskiego poziomuquerystring
. W celu analizowania parametrów z powtarzających sięqs
, parametr musi mieć wsporniki:name[]=val1&name[]=val2
. Obsługuje również mapy zagnieżdżone. Oprócz analizowania przesłanych formularzy HTML bodyParser może automatycznie analizować żądania JSON.Edycja : Przeczytałem na express.js i zmodyfikowałem moją odpowiedź, aby była bardziej naturalna dla użytkowników Express.
źródło
To zrobi, jeśli chcesz zbudować wysłane zapytanie bez oprogramowania pośredniego:
To wyśle to do przeglądarki
Prawdopodobnie lepiej jest jednak użyć oprogramowania pośredniego, więc nie musisz zapisywać tego w kółko na każdej trasie.
źródło
Uwaga dla użytkowników Express 4:
Jeśli spróbujesz umieścić
app.use(express.bodyParser());
w swojej aplikacji, podczas próby uruchomienia serwera Express pojawi się następujący błąd:Będziesz musiał zainstalować pakiet
body-parser
osobno od npm , a następnie użyj czegoś takiego: (przykład wzięty ze strony GitHub ):źródło
Biorąc pod uwagę jakąś formę:
Korzystanie z ekspresu
Wynik:
źródło
Backend:
Frontend:
źródło
Następnie na
app.post
żądanie można uzyskać wartości postów za pośrednictwemreq.body.{post request variable}
.źródło
Aktualizacja dla Express 4.4.1
Poniższe oprogramowanie pośrednie zostało usunięte z programu Express.
Gdy używasz oprogramowania pośredniego bezpośrednio tak, jak w Express 3.0. Otrzymasz następujący błąd:
Aby korzystać z oprogramowania pośredniego, musisz teraz zrobić npm dla każdego oprogramowania pośredniego osobno.
Ponieważ bodyParser jest oznaczony jako przestarzały, dlatego polecam następujący sposób, używając json, urlencode i parsera wieloczęściowego, np. Formidable, connect-multiparty. (Oprogramowanie pośrednie Multipart jest również przestarzałe).
Pamiętaj również, że po zdefiniowaniu urlencode + json dane formularza nie zostaną przeanalizowane, a żądanie będzie niezdefiniowane. Musisz zdefiniować oprogramowanie pośrednie obsługujące żądanie wieloczęściowe.
źródło
Dla Express 4.1 i nowszych
Ponieważ większość odpowiedzi używa Express, bodyParser, connect; gdzie multipart jest przestarzałe. Istnieje bezpieczny sposób łatwego wysyłania obiektów wieloczęściowych.
Multer może być używany jako zamiennik metody connect.multipart ().
Aby zainstalować pakiet
Załaduj go do swojej aplikacji:
Następnie dodaj go do stosu oprogramowania pośredniego wraz z innym narzędziem do analizowania oprogramowania pośredniego.
connect.json () obsługuje aplikację / json
connect.urlencoded () obsługuje aplikację / x-www-form-urlencoded
multer () obsługuje dane wieloczęściowe / formularze
źródło
Dokładnie szukałem tego problemu. Postępowałem zgodnie ze wszystkimi powyższymi wskazówkami, ale wymaganie: wciąż zwracałem pusty obiekt {}. W moim przypadku było to tak proste, jak niepoprawny HTML.
W formularzu HTML upewnij się, że używasz
'name'
atrybutu w tagach wejściowych, nie tylko'id'
. W przeciwnym razie nic nie zostanie przeanalizowane.Mój błąd idioto jest twoją korzyścią.
źródło
Nie powinieneś używać app.use (express.bodyParser ()) . BodyParser to połączenie json + urlencoded + mulitpart. Nie powinieneś tego używać, ponieważ multipart zostanie usunięty w Connect 3.0.
Aby rozwiązać ten problem, możesz to zrobić:
Bardzo ważne jest, aby wiedzieć, że app.use (app.router) powinien być używany po jsonie i urlencodowany, w przeciwnym razie nie zadziała!
źródło
Żądanie przesyłania strumieniowego działało dla mnie
źródło
postdata.split("&")
byłoby załadować moduł podstawowy,querystring = require('querystring')
a następnie przeanalizowaćpostdata
goquerystring.parse(postdata)
;Mogłem znaleźć wszystkie parametry, używając następującego kodu dla żądań POST i GET .
źródło
Napisane w wersji Express 4.16
Wewnątrz funkcji routera można użyć
req.body
właściwości, aby uzyskać dostęp do zmiennej post. Na przykład, jeśli była toPOST
trasa twojego formularza, odesłałbyś to, co wpisałeś:PS dla tych, którzy znają PHP: Aby uzyskać dostęp do
$_GET
zmiennej PHP, której używamy,req.query
i aby uzyskać dostęp do$_POST
zmiennej PHP używamyreq.body
w Node.js.źródło
źródło
Parametry posta można pobrać w następujący sposób:
źródło
param
jest używany do żądań GET .. nie POST, a twój przykład nie zawiera szczegółów, co jest bardzo mylące dla początkujących. Co więcej,request.param
jest to właściwie przestarzałe, więc twój przykład jest błędny na tak wielu poziomach.Używasz
req.query.post
metodą niewłaściwychreq.query.post
prac zmethod=get
,method=post
prac z ciała parsera .Spróbuj tego, zmieniając wpis, aby uzyskać :
W kodzie ekspresowym użyj „app.get”
źródło
Użyj pakietu express-fileupload :
źródło