Tenho um aplicativo Node.js / Express.js em execução no meu servidor que só funciona na porta 3000 e estou tentando descobrir por quê. Aqui está o que descobri:
- Sem especificar uma porta (
app.listen()
), o aplicativo é executado, mas a página da web não carrega. - Na porta 3001 (
app.listen(3001)
) ou em qualquer outra porta que não esteja em uso, o aplicativo é executado, mas a página da web não carrega. - Na porta 2999, o aplicativo gera um erro porque outra coisa está usando essa porta.
- Na porta 3000, o aplicativo é executado e a página da web carrega bem.
Eu sei que o padrão dos aplicativos Express é a porta 3000. Mas, estranhamente, meu aplicativo só é executado quando eu explicitamente o faço rodar na porta 3000 ( app.listen(3000)
).
Encontrei isso na linha 220 de /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
O que está fazendo como afirmado anteriormente: configurando a porta para o que está especificado ou para 3000 se nada for especificado.
Como posso fazer meu aplicativo funcionar em uma porta diferente, como 8080 ou 3001?
Obrigado!
Editar: amostra de código (Nó muito simples / aplicativo expresso)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
javascript
node.js
configuration
express
port
Benjamin Martin
fonte
fonte
port
é exigido por.listen()
, então você não deve tentar ficar sem. 2) Você está recebendo algum erro ao executar o aplicativo? Ou apenas parece inacessível de um navegador? 3) Você está tentando acessar o site na mesma máquina comlocalhost:3000
,localhost:3001
etc.? Se estiver usando duas máquinas, um cliente e um servidor, você precisará adicionar exceções ao firewall no servidor para permitir que o Node receba solicitações do cliente..listen()
. Acima, quando eu digo "o aplicativo é executado", isso é o mesmo que você dizendo, "sem erros ao executar o aplicativo". Quando digo "a página da web não carrega", é o mesmo que dizer "inacessível de um navegador". Todos os acessos na mesma máquina (meu servidor). Obrigado pelo feedback.$ supervisor app.js
ou$ PORT=[PORT] node app.js
quando desejo definir a variável da porta de ambiente. Vou colocar uma amostra de código.Respostas:
O seguinte funciona se você tiver algo assim em seu app.js:
Codifique explicitamente seu código para usar a porta desejada, como:
Este código significa definir sua porta para a variável de ambiente
PORT
ou, se for esse o casoundefined
, defina-a como literal3000
.Ou use seu ambiente para definir a porta. Configurá-lo por meio do ambiente é usado para ajudar a delinear entre
PRODUCTION
eDEVELOPMENT
também muitas plataformas como um serviço usam o ambiente para definir a porta de acordo com suas especificações, bem como configurações Express internas. O seguinte define um par chave = valor de ambiente e, em seguida, inicia seu aplicativo.Em referência ao seu exemplo de código, você quer algo assim:
fonte
app.set()
código dentro do meu aplicativo e alterei 3000 para 8080. Ainda só funciona noapp.listen(3000)
. 2. Altere a variável da porta de ambiente para 8080 ao executar o aplicativo de nó. Ainda só funcionaapp.listen(3000)
. 3. Foi para / usr / bin / express (linha 220) e mudou 3000 para 8080. Ainda só funciona noapp.listen(3000)
. Obrigado pela postagem informativa. Há algo que preciso reiniciar? O Express não pode ser reiniciado pelo que posso dizer e a reinicialização do aplicativo Node acontece toda vez que eu usonode app.js.
node app.js
irá iniciá-lo (eu pessoalmente usonodemon
ao desenvolver e testar. O que você pode estar pensando é oexpress
executável de linha de comando que é um processo auxiliar que constrói seu esqueleto estrutura do arquivo. Você pode postar um resumo do seu código?nodemon
em conjunto comnohup
para manter meu aplicativo em execução indefinidamente. Não estou usando a versão executável CL do,express
portanto, ele deve ser reiniciado toda vez que eu reiniciar meunode
aplicativo. Veja minha postagem original para uma edição com código. Obrigado!Em
bin/www
, há uma linha:Tente modificá-lo.
fonte
Tente isto
fonte
Tente localizar a posição bin> www e tente alterar o número da porta ...
fonte
A maneira padrão de alterar a porta de escuta no The Express framework é modificar o arquivo chamado www na pasta bin.
Lá, você encontrará uma linha como a seguinte
Altere o valor 3000 para qualquer porta que desejar.
Isso é válido para Express versão 4.13.1
fonte
Apenas uma observação para usuários de Mac OS X e Linux:
Se você deseja executar seu aplicativo Node / Express em um número de porta inferior a 1024, você deve executar como superusuário:
sudo PORT=80 node app.js
fonte
Na última versão do código com express-generator (4.13.1) app.js é um módulo exportado e o servidor é iniciado em / bin / www usando app.set ('port', process.env.PORT || 3001) em app.js será substituído por uma instrução semelhante em bin / www. Acabei de alterar a declaração em bin / www.
fonte
Percebi que isso nunca foi resolvido ... Você provavelmente tem um firewall na frente da sua máquina bloqueando essas portas, ou o iptables está configurado para impedir o uso dessas portas.
Tente executar o nmap -F localhost ao executar seu aplicativo (instale o nmap se não o tiver). Se parecer que você está executando o aplicativo na porta correta e não pode acessá-lo por meio de um navegador remoto, há algum middleware ou firewall físico que está bloqueando a porta.
Espero que isto ajude!
fonte
A linha que você encontrou apenas procura a variável de ambiente
PORT
, se estiver definida ela a usa, caso contrário, usa a porta padrão3000
. Você tem que definir esta variável ambiental primeiro (não precisa ser root)fonte
Se você quiser mostrar algo, você está conectado em 3000
Espero que seja útil para você
fonte
Responder de acordo com a versão atual do expresso
Se você falar sobre a versão atual do express , se você executar
app.listen()
para começar a escutar sem especificar a porta, o Express escolherá uma porta aleatória para o seu aplicativo, para descobrir qual porta está sendo usada no momentodeve produzir a porta do seu
app
. Além disso, esse primeiro parâmetro0
pode ser totalmente ignorado, mas não é recomendadofonte
Certifique-se de estar executando a partir dessa pasta do seu aplicativo, onde você tem o package.json.
fonte
Estou usando o
minimist
pacote e os argumentos de inicialização do nó para controlar a porta.node server.js --port 4000
ou
node server.js -p 4000
Dentro do server.js, a porta pode ser determinada por
e o padrão é 3000 se nenhuma porta for passada como argumento.
Você pode então usar listen na
port
variável.fonte
Em app.js, basta adicionar ...
Isso isolará a variável PORT para o aplicativo expresso.
fonte
Acho que a melhor maneira é usar o pacote dotenv e definir a porta no
.env
arquivo de configuração sem modificar o arquivowww
dentro da pastabin
.Basta instalar o pacote com o comando:
solicite em seu aplicativo:
Crie um arquivo .env no diretório raiz do seu projeto e adicione a porta nele (por exemplo) para ouvir na porta 5000
e é isso.
Mais informações aqui
fonte
Se você estiver usando o Nodemon, meu palpite é que a PORT 3000 está definida no nodemonConfig. Verifique se é esse o caso.
fonte