Wiem, jak uzyskać parametry dla takich zapytań:
app.get('/sample/:id', routes.sample);
W tym przypadku można użyć req.params.id
, aby uzyskać parametru (np 2
w /sample/2
).
Jednak w przypadku adresu URL /sample/2?color=red
, jak mogę uzyskać dostęp do zmiennej color
?
Próbowałem, req.params.color
ale to nie zadziałało.
node.js
express
query-string
Hanfei Sun
źródło
źródło
id
w funkcji takich jak to:var sampleId = req.params.id;
.req.params.whatever
w najnowszych wersjach.req.params
różni się odreq.query
! expressjs.com/en/api.html#req.params expressjs.com/en/api.html#req.query @adelriosantiagoUżyj req.query, aby uzyskać wartość parametru ciągu zapytania w trasie. Zobacz zapytanie . Powiedz, że jeśli na trasie http: // localhost: 3000 /? Name = satyam chcesz uzyskać wartość parametru name, wówczas procedura obsługi trasy „Get” będzie wyglądać następująco: -
źródło
Aktualizacja:
req.param()
jest już przestarzała, więc nie używaj tej odpowiedzi.Twoja odpowiedź jest preferowanym sposobem na zrobienie tego, jednak pomyślałem, że zwrócę uwagę, że możesz również uzyskać dostęp do parametrów adresu URL, wpisu i trasy
req.param(parameterName, defaultValue)
.W Twoim przypadku:
Z przewodnika ekspresowego:
Uwaga: przewodnik zawiera następujące informacje:
Jednak w praktyce okazało się,
req.param()
że jest wystarczająco jasny i ułatwia pewne rodzaje refaktoryzacji.źródło
Ciąg zapytania i parametry są różne.
Musisz użyć obu w jednym adresie URL routingu
Sprawdź poniższy przykład, który może Ci się przydać.
Uzyskaj link do przekazania drugiego segmentu to Twój przykładowy identyfikator: http: // localhost: port / sample / 123
Jeśli napotykasz problem, użyj parametru Przekazywanie zmiennych jako ciągu zapytania za pomocą „?” operator
Uzyskaj link podobny do tego: http: // localhost: port / sample? Id = 123
Oba w jednym przykładzie
Uzyskaj przykładowy link: http: // localhost: port / sample / 123? Id = 123
źródło
@ Odpowiedź Zugwaita jest poprawna.
req.param()
jest przestarzałe. Należy użyćreq.params
,req.query
lubreq.body
.Ale żeby to wyjaśnić:
req.params
zostaną wypełnione tylko wartościami trasy. Oznacza to, że jeśli masz trasę typu/users/:id
, możesz uzyskać dostęp doid
wreq.params.id
lubreq.params['id']
.req.query
ireq.body
zostaną wypełnione wszystkimi parametrami , niezależnie od tego, czy znajdują się na trasie. Oczywiście parametry w ciągu zapytania będą dostępne w,req.query
a parametry w treści postu będą dostępne wreq.body
.Odpowiadając na pytania, ponieważ
color
nie ma go na trasie, powinieneś być w stanie je uzyskać za pomocąreq.query.color
lubreq.query['color']
.źródło
Instrukcja ekspresowa mówi, że powinieneś użyć req.query, aby uzyskać dostęp do QueryString.
źródło
źródło
Fajną techniką, którą zacząłem stosować z niektórymi moimi aplikacjami w express, jest stworzenie obiektu, który łączy zapytanie, parametry i pola treści obiektu żądania express.
Następnie w ciele kontrolera lub w dowolnym innym miejscu w łańcuchu wyraźnych żądań możesz użyć czegoś takiego jak poniżej:
To sprawia, że miło i wygodnie jest po prostu „zagłębić się” we wszystkie „niestandardowe dane”, które użytkownik mógł wysłać z prośbą.
Uwaga
Dlaczego pole „rekwizyty”? Ponieważ był to fragment kodu, używam tej techniki w wielu moich interfejsach API, przechowuję również dane uwierzytelniające / autoryzacyjne w tym obiekcie, przykład poniżej.
źródło