web-dev-qa-db-ja.com

Node.js / Express.jsアプリはポート3000でのみ動作します

ポート3000でのみ動作するNode.js/Express.jsアプリをサーバー上で実行していますが、その理由を解明しようとしています。私が見つけたものは次のとおりです。

  • ポート(app.listen())を指定しないと、アプリは実行されますが、Webページは読み込まれません。
  • ポート3001(app.listen(3001))または使用されていない他のポートでは、アプリは実行されますが、Webページは読み込まれません。
  • ポート2999では、他の誰かがそのポートを使用しているため、アプリはエラーをスローします。
  • ポート3000で、アプリが実行され、Webページが正常にロードされます。

Expressアプリはデフォルトでポート3000であることを知っています。しかし、奇妙なことに、アプリはポート3000(app.listen(3000))で明示的に実行した場合にのみ実行されます。

/usr/bin/expressの220行目でこれを見つけました:

app.set(\'port\', process.env.PORT || 3000);

前に述べたように、どちらを行うか:ポートを指定されたものに設定するか、何も指定されていない場合は3000に設定する.

8080や3001などの別のポートでアプリを動作させるにはどうすればよいですか?

ありがとう!

編集:コードサンプル(非常にシンプルなノード/エクスプレスアプリ)

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);
85
Benjamin Martin

App.jsにこのようなものがある場合、次のように機能します。

http.createServer(app).listen(app.get('port'),
  function(){
    console.log("Express server listening on port " + app.get('port'));
});

次のように、必要なポートを使用するようにコードを明示的にハードコードするか、

app.set('port', process.env.PORT || 3000);

このコードは、ポートを環境変数PORTに設定するか、それがundefinedである場合はリテラル3000に設定することを意味します。

または、環境を使用してポートを設定します。環境を介して設定することは、PRODUCTIONDEVELOPMENTを区別するために使用されます。また、多くのPlatform as a Serviceは環境を使用して、仕様および内部Express構成に従ってポートを設定します。以下は、環境のkey = valueペアを設定し、アプリを起動します。

$ PORT=8080 node app.js

コード例を参照すると、次のようなものが必要です。

var express = require("express");
var app = express();

// sets port 8080 to default or unless otherwise specified in the environment
app.set('port', process.env.PORT || 8080);

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);
app.listen(app.get('port'));
104
EhevuTov

bin/wwwには、次の行があります。

var port = normalizePort(process.env.PORT || '3000');

変更を試みてください。

26
Larry Lu

これを試して

$ PORT=8080 node app.js
12
John Williams

Expressフレームワークのリスニングポートを変更するデフォルトの方法は、binフォルダー内のwwwという名前のファイルを変更することです。

そこには、次のような行があります

var port = normalizePort(process.env.PORT || '3000');

値3000を任意のポートに変更します。

これはExpressバージョン4.13.1で有効です

9
AliAvci

Refer to this link.

Bin> wwwの場所を見つけて、ポート番号を変更してみてください...

9
Abhishek Gautam

Express-generator(4.13.1)を使用したコードの最新バージョンでは、app.jsはエクスポートされたモジュールであり、サーバーはapp.set( 'port'、process.env.PORT || 3001)を使用して/ bin/wwwで起動されます。 app.jsのbin/wwwの同様のステートメントによってオーバーライドされます。 bin/wwwのステートメントを変更しました。

4
user1276682

Mac OS XおよびLinuxユーザーへの注意事項:

1024よりも小さいポート番号でNode/Expressアプリを実行する場合は、スーパーユーザーとして実行する必要があります:Sudo PORT=80 node app.js

3
user3711307

3000で接続しているものを表示したい場合

var express = require('express')
var app = express()

app.get('/', function (req, res) {
  res.send('Hello World!')
})

app.listen(3000, function () {
  console.log('Example app listening on port 3000!')
})

それがあなたのお役に立てば幸いです

2
MEAbid

見つけた行は、環境変数PORTを探します。定義されている場合はそれを使用し、そうでない場合はデフォルトのポート3000を使用します。最初にこの環境変数を定義する必要があります(ルートである必要はありません)

export PORT=8080
node <your-app.js>
2
dinigo

expressの現在のバージョンに従って回答

expressの現在のバージョンについて話す場合app.listen()ポートを指定せずにリッスンを開始するには、Expressがランダムポートを選択しますアプリケーションで、使用中に現在実行されているポートを確認する

app.listen(0, () => {
    console.log(app.address().port)
}

出力は、appポートです。さらに、最初のパラメーター0は完全に無視できますが、非推奨です

1

これが解決されなかったことに注意してください...マシンの前にこれらのポートをブロックしているファイアウォールがあるか、それらのポートの使用を防ぐためにiptablesがセットアップされている可能性があります。

アプリの実行時にnmap -F localhostを実行してみてください(nmapがない場合はインストールしてください)。正しいポートでアプリを実行しているように見え、リモートブラウザ経由でアクセスできない場合は、ポートをブロックしているミドルウェアまたは物理ファイアウォールがあります。

お役に立てれば!

1
user2855232

App.jsでは、追加するだけです...

process.env.PORT=2999;

これにより、PORTアプリケーションがエクスプレスアプリケーションに分離されます。

1
Mark Longmire

Nodemonを使用している場合、PORT 3000はnodemonConfigで設定されていると思います。そうであるかどうかを確認してください。

0
Samuel Adranyi

Package.jsonがあるアプリケーションのフォルダーから実行していることを確認してください。

0

dotenv packageを使用し、.env構成ファイルにポートを設定して、フォルダーwww内のファイルbinを変更しないでください。

次のコマンドでパッケージをインストールするだけです:

npm install dotenv

アプリケーションでそれを要求します。

require('dotenv').config()

プロジェクトのルートディレクトリに.envファイルを作成し、そのポートを(たとえば)追加して、ポート5000でリッスンします

PORT=5000

以上です。

詳細 こちら

0
huckbit

ポートを制御するためにminimistパッケージとノード起動引数を使用しています。

node server.js --port 4000

または

node server.js -p 4000

Server.js内では、ポートは

var argv = parseArgs(process.argv.slice(2))

const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)

//....listen(port);

引数としてポートが渡されない場合は、デフォルトで3000になります。

その後、port変数でlistenを使用できます。

0
williamli