node.jsでprocess.env.PORT || 3000
は何に使用されていますか?私はこれをどこかで見ました:
app.set('port', process.env.PORT || 3000);
リスニングポートとして3000
を設定するために使用されている場合、代わりにこれを使用できますか?
app.listen(3000);
もしそうでないのであれば?
多くの環境(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
に等しい4444
を使用します。 1024未満のポートではSudo
を付けて実行します。
アプリケーションを別のサービス(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);
シナリオによっては、port
は環境によってのみ指定でき、ユーザー環境変数に保存されます。以下はnode.jsアプリがどのように動作するかを示しています。
process
オブジェクトは、現在のNode.jsプロセスに関する情報を提供し、それを制御するグローバルです。グローバルなものとして、require()
を使用せずにNode.jsアプリケーションから常に利用可能です。
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
処理内容process.envグローバル変数は、アプリケーションが使用するために実行時にNodeによってインジェクトされ、アプリケーションの起動時のシステム環境の状態を表します。たとえば、システムにPATH変数が設定されている場合、これはprocess.env.PATHを通じてアクセス可能になります。これを使用して、バイナリの場所を確認し、必要に応じてバイナリを外部に呼び出すことができます。