1. ホーム
  2. javascript

[解決済み] Node.js/Express.jsのアプリがポート3000で動作するのみ

2022-11-07 20:23:59

質問

サーバー上で Node.js/Express.js アプリケーションを実行していますが、ポート 3000 でしか動作しないため、その原因を探っています。以下は、私が発見したことです。

  • ポートを指定せずに ( 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 などの別のポートでアプリを動作させるにはどうしたらよいでしょうか。

ありがとうございます。

編集:コードサンプル(とてもシンプルなNode/Expressアプリ)

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

どのように解決するのですか?

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 また、多くのPlatforms as a Serviceは、Expressの内部設定と同様に、その仕様に従ってポートを設定するために環境を使用します。以下は、環境のキーと値のペアを設定し、アプリを起動します。

$ 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'));