Digamos que meu URL de amostra seja
e eu digo que tenho a seguinte rota
app.get('/one/two', function (req, res) {
var url = req.url;
}
O valor de url
será /one/two
.
Como obtenho o URL completo no Express? Por exemplo, no caso acima, eu gostaria de receber http://example.com/one/two
.
Respostas:
O protocolo está disponível como
req.protocol
. docs aquihttp
menos que você veja quereq.get('X-Forwarded-Protocol')
está definido e tem o valorhttps
; nesse caso, você sabe que é o seu protocoloO anfitrião vem
req.get('host')
como Gopal indicouEspero que você não precise de uma porta não padrão em seus URLs, mas se você soubesse, você a teria no estado do aplicativo, porque é o que você passou
app.listen
no momento da inicialização do servidor. No entanto, no caso de desenvolvimento local em uma porta não padrão, o Chrome parece incluir a porta no cabeçalho do host ,req.get('host')
retornandolocalhost:3000
, por exemplo. Portanto, pelo menos nos casos de um site de produção em uma porta padrão e navegando diretamente para seu aplicativo expresso (sem proxy reverso), ohost
cabeçalho parece fazer a coisa certa em relação à porta na URL.O caminho vem
req.originalUrl
(obrigado @pgrassant). Observe que isso inclui a string de consulta. docs aqui em req.url e req.originalUrl . Dependendo do que você pretende fazer com o URL,originalUrl
pode ou não ser o valor correto em comparação comreq.url
.Combine tudo isso para reconstruir o URL absoluto.
fonte
req.get('Host')
vez dereq.host
que fornece ao host mais a seção da porta.host
parâmetro nos cabeçalhos da solicitação pode ser falsificado. Existe um possível "ataque ao cabeçalho do host" se for usadores.host
dessa maneira. Na estrutura do Django, eles têm uma variável 'hosts permitidos' que é usada para impedir esse ataque. Eu uso uma variável de configuração que é minha,root_url
que pode ser adicionada àreq.url
conclusão. Sobre o ataque: skeletonscribe.net/2013/05/…req.originalUrl
sem parâmetros, basta fazerreq.originalUrl.split("?").shift()
. Fonte: stackoverflow.com/a/32118818/2037431Em vez de concatenar as coisas por conta própria, você pode usar a API node.js para URLs e transmitir
URL.format()
as informações do express.Exemplo:
fonte
req.get('host')
retorna apenas a parte do nome do host , não a porta. Não sei por que, mas agora reuno o número da porta nas configurações e uso ohostname
campo, em vez dehost
.pathname
, acho que você quer dizerpath
. Que inclui pesquisa / querystringAchei um pouco PITA obter o URL solicitado. Não acredito que não há uma maneira mais fácil de expressar. Deve ser apenas req.requested_url
Mas aqui está como eu o defino:
fonte
req.port
? Não está na documentação do Express?req.app.settings.port
Usando url.format :
Isso suporta todos os protocolos e inclui o número da porta. Se você não possui uma string de consulta no seu originalUrl, pode usar esta solução mais limpa:
Se você tiver uma sequência de consultas:
fonte
Aqui está uma ótima maneira de adicionar uma função que você pode chamar no objeto req para obter o URL
Agora você tem uma função que pode chamar sob demanda, se precisar.
fonte
efetivar req.host/req.hostname deve ter duas condições quando o Express behind proxies :
app.set('trust proxy', 'loopback');
no app.jsX-Forwarded-Host
O cabeçalho deve ser especificado por você no servidor da web. por exemplo. apache, nginxnginx :
apache :
fonte
127.0.0.1
a partir dereq.get('host')
Usa isto,
fonte
ou
fonte
Você precisa construí-lo usando
req.headers.host + req.url
. Obviamente, se você estiver hospedando em uma porta diferente, você entenderá ;-)fonte
req.protocol
Eu sugeriria usar originalUrl em vez de URL:
Veja a descrição do originalUrl aqui: http://expressjs.com/api.html#req.originalUrl
Em nosso sistema, fazemos algo assim, portanto o originalUrl é importante para nós:
blah_controller aparece assim:
Portanto, nossos URLs têm o formato:
Portanto, precisamos req.originalUrl no controlador de barras get handler.
fonte
Meu código fica assim,
params['host_url'] = req.protocol + '://' + req.headers.host + req.url;
fonte
Eu uso o pacote de nós 'url' (npm install url)
O que faz é quando você chama
isso lhe dará a possibilidade de recuperar todo ou parte do URL. Mais informações aqui: https://github.com/defunctzombie/node-url
Usei-o da seguinte maneira para obter o que vem depois do / no http://www.example.com/ para usar como variável e criar um perfil específico (como o facebook: http: //www.facebook. com / nome de usuário )
Embora para que isso funcione, você deve criar sua rota dessa maneira no arquivo server.js:
E defina seu arquivo de rota desta maneira:
fonte
Você pode usar esta função na rota como esta
req.protocol
fornecerá http ou https,req.headers.host
fornecerá o nome completo do host, como www.google.com,req.originalUrl
fornecerá o restantepathName
(no seu caso/one/two
)fonte
Obrigado a todos por esta informação. Isso é incrivelmente irritante.
Adicione isso ao seu código e você nunca mais precisará pensar sobre isso:
Você também pode fazer ou definir outras coisas, como fazer logon no console.
fonte
Apenas o código abaixo foi suficiente para mim!
fonte