Você costuma ver um exemplo de código hello world para o Node que cria um servidor HTTP, começa a escutar em uma porta e é seguido por algo como:
console.log('Server is listening on port 8000');
Mas o ideal é que você queira isso:
console.log('Server is listening on port ' + server.port);
Como recupero a porta em que o servidor está ouvindo no momento sem armazenar o número em uma variável antes de ligar server.listen()
?
Já vi isso antes, mas não consigo encontrá-lo na documentação do Nó. Talvez seja algo específico para expressar?
javascript
node.js
express
port
David Tang
fonte
fonte
req.headers.host
Respostas:
Resposta expressa 4.x:
O Express 4.x (conforme a resposta de Tien Do abaixo), agora trata app.listen () como uma operação assíncrona, portanto listener.address () retornará apenas dados dentro do retorno de chamada de app.listen ():
Express 3 resposta:
Eu acho que você está procurando isso (express específico?):
Você pode ter visto isso (linha inferior), ao criar a estrutura de diretórios a partir do
express
comando:fonte
var listener
você pode usarthis.address().port
dentro deapp.listen()
callbackthis.address.port()
mas não pode usá-lo dentro de uma função de seta. você vai precisar fazer a velha escolaapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }
(sim, eu sei backticks são mais agradáveis, mas não posso fazê-las nos comentários de estouro de pilha)No express v3.0,
não funciona mais! Para o Express v3.0, você deve criar um aplicativo e um servidor da seguinte maneira:
Eu mesmo corri para esse problema e queria documentar a nova sintaxe. Esta e outras alterações no Express v3.0 são visíveis em https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
fonte
0
paraserver.listen()
, caso em que um número de porta aleatório é atribuído. Você pode fazer isso se estiver executando vários aplicativos Express em um servidor e não desejar atribuir números de porta manualmente.app.listen()
também retorna a instância do servidor http.Na versão atual (v0.5.0-pre), a porta parece estar disponível como uma propriedade no objeto do servidor, consulte http://nodejs.org/docs/v0.4.7/api/net.html#server.address
saídas
fonte
Caso você precise de uma porta no momento do tratamento da solicitação e o aplicativo não esteja disponível, você pode usar o seguinte:
fonte
Se você estiver usando express, poderá obtê-lo no objeto request:
fonte
Eu uso dessa maneira o Express 4:
Ao usar isso, não preciso usar uma variável separada para o ouvinte / servidor.
fonte
this
será indefinido.Exigir o módulo http nunca foi necessário.
Uma importação adicional de
http
não é necessária no Express 3 ou 4. A atribuição do resultado delisten()
é suficiente.Novamente, isso é testado no Express 3.5.1 e 4.0.0. A importação
http
nunca foi necessária. O método listen retorna um objeto de servidor http. https://github.com/visionmedia/express/blob/master/lib/application.js#L531fonte
Com o node.js mais recente (v0.3.8-pre): verifiquei a documentação, inspecionei a instância do servidor retornada por http.createServer () e li o código-fonte server.listen () ...
Infelizmente, a porta é armazenada apenas temporariamente como uma variável local e acaba como argumento em uma chamada para process.binding ('net'). Bind (), que é um método nativo. Eu não procurei mais.
Parece que não há maneira melhor do que manter uma referência ao valor da porta que você forneceu ao server.listen ().
fonte
A maneira mais simples de converter do estilo antigo para o novo (Express 3.x) é assim:
Antes da versão 3.x, funciona assim:
fonte
fonte
Eu também estava me fazendo essa pergunta, então vim para a página do guia Express 4.x para ver este exemplo:
fonte
Você pode obter o número da porta usando o
server.address().port
código abaixo:fonte
fonte
Se você não definiu o número da porta e deseja saber em qual porta está executando.
Para sua informação, sempre que ele for executado em uma porta diferente.
fonte
O
findandbind
npm endereça isso para express / restify / connect: https://github.com/gyllstromk/node-find-and-bindfonte
abaixo de um servidor http simples e como obter a porta de escuta
obtenha a porta do servidor usando:
fonte
fonte
A maneira mais fácil é ligar
app.get('url')
, o que fornece o protocolo, subdomínio, domínio e porta.fonte