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);
.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.
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.