108

ポート 3000 でのみ動作する Node.js/Express.js アプリをサーバーで実行していますが、その理由を突き止めようとしています。これが私が見つけたものです:

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

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

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

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

16 に答える 16

131

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ます。

または、環境を使用してポートを設定します。環境を介して設定することは、多くのサービスとしてのプラットフォームが環境を使用して、仕様と内部 Express 構成に従ってポートを設定するのに役立ちPRODUCTIONますDEVELOPMENT。以下は、環境キーと値のペアを設定し、アプリを起動します。

$ 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'));
于 2013-08-02T19:29:48.173 に答える
34

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

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

変更してみてください。

于 2016-04-07T02:28:51.297 に答える
14

これを試して

$ PORT=8080 node app.js
于 2013-08-02T04:09:16.690 に答える
11

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

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

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

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

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

于 2016-01-17T17:12:47.703 に答える
4

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

于 2015-09-17T16:47:21.273 に答える
4

Mac OS X および Linux ユーザー向けのメモ:

Node / Express アプリを 1024 未満のポート番号で実行する場合は、スーパーユーザーとして実行する必要があります。 sudo PORT=80 node app.js

于 2014-11-10T14:35:39.933 に答える
2

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

export PORT=8080
node <your-app.js>
于 2016-08-04T09:12:22.883 に答える