回答:
多くの環境(Herokuなど)では、慣例として、環境変数PORT
を設定して、Webサーバーにリッスンするポートを指示できます。
つまりprocess.env.PORT || 3000
、環境変数PORTにあるものは何でも、何もない場合は3000です。
したがって、、app.listen
またはに渡すと、app.set('port', ...)
サーバーは、どのポートをリッスンする環境からのパラメータを受け入れることができるようになります。
3000
ハードコードをに渡すapp.listen()
と、要件とサーバーを実行している環境の要件に応じて、ポート3000が常にリッスンされます。
実行するとnode index.js
、Nodeは3000
を実行するとPORT=4444 node index.js
、Nodeはこの例のprocess.env.PORT
whichに等しい値を使用します4444
。sudo
1024未満のポートで実行します。
アプリケーションを別のサービス(Heroku、Nodejitsu、AWSなど)でホストする場合、ホストがprocess.env.PORT
変数を個別に構成する場合があります。結局のところ、スクリプトはその環境で実行されます。
AmazonのElastic Beanstalkがこれを行います。3000が静的設定の3000
代わりに静的ポート値を設定しようとするとprocess.env.PORT || 3000
、Amazonがポートを構成しているため、アプリケーションで500ゲートウェイエラーが発生します。
これは、AmazonのElastic Beanstalkにデプロイされる最小限のExpressアプリケーションです。
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
// use port 3000 unless there exists a preconfigured port
var port = process.env.port || 3000;
app.listen(port);
const {PORT = 3000} = process.env
一部のシナリオでport
は、環境によってのみ指定でき、ユーザー環境変数に保存されます。以下は、node.jsアプリがどのように機能するかです。
process
オブジェクトは、過電流のNode.jsプロセスに関する情報、及び制御を提供するグローバルです。グローバルとして、これはNode.jsアプリケーションで常に使用できますrequire()
。
process.env
プロパティは、ユーザーの環境を含むオブジェクトを返します。
このオブジェクトの例は次のようになります。
{
TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node'
}
例えば、
端末:永続的ではなく、新しいユーザー環境変数を設定します
export MY_TEST_PORT=9999
app.js:ノードアプリから新しい環境変数を読み取ります
console.log(process.env.MY_TEST_PORT)
端末:ノードアプリを実行して値を取得する
$ node app.js
9999