2013-08-05 15 views
5

Piszę aplikację expressjs. to req.params.nething zawsze ciąg znaków, a nie numer Załóżmy, że jeśli przekazuję numer dla id_użytkownika, jego typof jest zawsze ciągiem.req.params.number to ciąg w expressjs?

app.get('user/:user_id', function(req, res){ 
    console.log(typeof req.params.user_id); 
}); 

użytkownik GET/21

ten rejestruje ciąg.

Czy jest to zawsze ciąg znaków dla parametru req.params.x?

+1

Można zdefiniować własne parametry, w takim przypadku mogą być dowolnego rodzaju. [Dokumentacja] (http://expressjs.com/api.html#app.param). – mak

+0

Express po prostu analizuje ciąg znaków url za pomocą 'RegExp'. Tak więc, jeśli potrzebujesz go jako liczby, możesz sam ją przekonwertować: 'req.params.x = parseInt (req.params.x)'. –

+2

Wskazówka: 'Number (req.params.x)' jest szybszy niż 'parseInt (req.params.x)' – randunel

Odpowiedz

4

Tak, wszystkie parametry będą ciągami.

ten jest uzyskiwany z expressjs route.js:

var val = 'string' == typeof m[i] 
    ? decodeURIComponent(m[i]) 
    : m[i]; 

Więc val zawsze będzie ciąg, ponieważ wynikiem decodeURIComponent zawsze jest ciągiem znaków, natomiast m jest wynikiem RegExp.exec() która zwraca tablicę pasujących ciągów, więc można bezpiecznie założyć, że m[i] będzie ciągiem znaków.

+0

To nie jest dobra odpowiedź. Powinieneś podać więcej informacji, skąd wiesz, że zawsze są ciągami. Czy masz coś przeciwko udostępnieniu swojego źródła? – mak

+0

Odpowiedź na twój poprzedni komentarz: z doświadczenia. Miło z twojej strony, że edytujesz swój komentarz. – randunel

+0

Twoje wyjaśnienie jest nieprawidłowe. 'decodeURIComponent' zostanie wywołany (i zwróci łańcuch) tylko wtedy, gdy' m [i] 'jest łańcuchem znaków. Jeśli 'm [i]' nie jest łańcuchem, to 'decodeURIComponent' nie jest wywoływane, a' val' nie jest łańcuchem. – mak

Powiązane problemy