ポート3000でのみ動作するNode.js/Express.jsアプリをサーバー上で実行していますが、その理由を解明しようとしています。私が見つけたものは次のとおりです。
app.listen()
)を指定しないと、アプリは実行されますが、Webページは読み込まれません。app.listen(3001)
)または使用されていない他のポートでは、アプリは実行されますが、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);
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
に設定することを意味します。
または、環境を使用してポートを設定します。環境を介して設定することは、PRODUCTION
とDEVELOPMENT
を区別するために使用されます。また、多くの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'));
bin/www
には、次の行があります。
var port = normalizePort(process.env.PORT || '3000');
変更を試みてください。
これを試して
$ PORT=8080 node app.js
Expressフレームワークのリスニングポートを変更するデフォルトの方法は、binフォルダー内のwwwという名前のファイルを変更することです。
そこには、次のような行があります
var port = normalizePort(process.env.PORT || '3000');
値3000を任意のポートに変更します。
これはExpressバージョン4.13.1で有効です
Bin> wwwの場所を見つけて、ポート番号を変更してみてください...
Express-generator(4.13.1)を使用したコードの最新バージョンでは、app.jsはエクスポートされたモジュールであり、サーバーはapp.set( 'port'、process.env.PORT || 3001)を使用して/ bin/wwwで起動されます。 app.jsのbin/wwwの同様のステートメントによってオーバーライドされます。 bin/wwwのステートメントを変更しました。
Mac OS XおよびLinuxユーザーへの注意事項:
1024よりも小さいポート番号でNode/Expressアプリを実行する場合は、スーパーユーザーとして実行する必要があります:Sudo PORT=80 node app.js
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!')
})
それがあなたのお役に立てば幸いです
見つけた行は、環境変数PORT
を探します。定義されている場合はそれを使用し、そうでない場合はデフォルトのポート3000
を使用します。最初にこの環境変数を定義する必要があります(ルートである必要はありません)
export PORT=8080
node <your-app.js>
expressの現在のバージョンについて話す場合app.listen()
ポートを指定せずにリッスンを開始するには、Expressがランダムポートを選択しますアプリケーションで、使用中に現在実行されているポートを確認する
app.listen(0, () => {
console.log(app.address().port)
}
出力は、app
のポートです。さらに、最初のパラメーター0
は完全に無視できますが、非推奨です
これが解決されなかったことに注意してください...マシンの前にこれらのポートをブロックしているファイアウォールがあるか、それらのポートの使用を防ぐためにiptablesがセットアップされている可能性があります。
アプリの実行時にnmap -F localhostを実行してみてください(nmapがない場合はインストールしてください)。正しいポートでアプリを実行しているように見え、リモートブラウザ経由でアクセスできない場合は、ポートをブロックしているミドルウェアまたは物理ファイアウォールがあります。
お役に立てれば!
App.jsでは、追加するだけです...
process.env.PORT=2999;
これにより、PORTアプリケーションがエクスプレスアプリケーションに分離されます。
Nodemonを使用している場合、PORT 3000はnodemonConfigで設定されていると思います。そうであるかどうかを確認してください。
Package.jsonがあるアプリケーションのフォルダーから実行していることを確認してください。
ポートを制御するために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を使用できます。