Eu sei como obter os parâmetros para consultas como esta:
app.get('/sample/:id', routes.sample);
Nesse caso, eu posso usar req.params.id
para obter o parâmetro (por exemplo, 2
in /sample/2
).
No entanto, para URL /sample/2?color=red
, como posso acessar a variável color
?
Eu tentei, req.params.color
mas não funcionou.
node.js
express
query-string
Hanfei Sun
fonte
fonte
id
sua função como esta:var sampleId = req.params.id;
.req.params.whatever
nas versões mais recentes.req.params
é diferente dereq.query
! expressjs.com/en/api.html#req.params expressjs.com/en/api.html#req.query @adelriosantiagoUse req.query, para obter o valor ele no parâmetro da string de consulta na rota. Consulte req.query . Diga que em uma rota, http: // localhost: 3000 /? Name = satyam, você deseja obter o valor do parâmetro name, então o manipulador de rotas 'Get' será assim: -
fonte
Atualização:
req.param()
agora está obsoleta, portanto, daqui para frente, não use esta resposta.Sua resposta é a maneira preferida de fazê-lo, no entanto, pensei em apontar que você também pode acessar os parâmetros de URL, postagem e rota
req.param(parameterName, defaultValue)
.No seu caso:
Do guia expresso:
Observe que o guia declara o seguinte:
No entanto, na prática, na verdade, sou
req.param()
suficientemente claro e facilita alguns tipos de refatoração.fonte
Cadeia de consulta e parâmetros são diferentes.
Você precisa usar ambos no URL de roteamento único
Por favor, verifique o exemplo abaixo pode ser útil para você.
Obter o link para passar o seu segundo segmento é o seu exemplo de identificação: http: // localhost: port / sample / 123
Se você estiver enfrentando um problema, use Passando variáveis como string de consulta usando '?' operador
Obtenha o link como este exemplo: http: // localhost: port / sample? Id = 123
Ambos em um único exemplo
Obter exemplo de link: http: // localhost: port / sample / 123? Id = 123
fonte
@ A resposta do Zugwait está correta.
req.param()
está obsoleto. Você deve usarreq.params
,req.query
oureq.body
.Mas apenas para esclarecer:
req.params
será preenchido apenas com os valores da rota. Ou seja, se você tiver uma rota como/users/:id
, poderá acessar a opçãoid
emreq.params.id
oureq.params['id']
.req.query
ereq.body
será preenchido com todos os parâmetros, independentemente de estarem ou não na rota. Claro, parâmetros na cadeia de consulta estará disponível emreq.query
e parâmetros em um corpo pós estará disponível emreq.body
.Portanto, respondendo às suas perguntas, como
color
não está na rota, você poderá obtê-lo usandoreq.query.color
oureq.query['color']
.fonte
O manual expresso diz que você deve usar o req.query para acessar o QueryString.
fonte
fonte
Uma boa técnica que comecei a usar com alguns dos meus aplicativos no express é criar um objeto que mescla os campos de consulta, parâmetros e corpo do objeto de solicitação do express.
Em seguida, no corpo do seu controlador ou em qualquer outro lugar no escopo da cadeia de solicitações expressas, você pode usar algo como abaixo:
Isso torna agradável e prático apenas "investigar" todos os "dados personalizados" que um usuário pode ter enviado com sua solicitação.
Nota
Por que o campo 'adereços'? Como esse foi um fragmento reduzido, eu uso essa técnica em várias APIs, também armazeno dados de autenticação / autorização nesse objeto, exemplo abaixo.
fonte