web-dev-qa-db-ja.com

Node.jsのprocess.env.PORTは何ですか?

node.jsでprocess.env.PORT || 3000は何に使用されていますか?私はこれをどこかで見ました:

 app.set('port', process.env.PORT || 3000);

リスニングポートとして3000を設定するために使用されている場合、代わりにこれを使用できますか?

app.listen(3000);

もしそうでないのであれば?

136
user-S

多くの環境(Herokuなど)では、また慣例として、環境変数PORTを設定して、Webサーバーに待機するポートを指定できます。

つまりprocess.env.PORT || 3000は、環境変数PORTにあるものは何でも、何もなければ3000です。

それで、あなたはそれをapp.listenまたはapp.set('port', ...)に渡します、そしてそれはあなたのサーバーが環境からどのポートをリッスンするべきかパラメータを受け入れることを可能にします。

ハードコード化された3000app.listen()に渡すと、ポート3000を常にリッスンしていることになります。これは、自分の要件とサーバーを実行している環境の要件によって異なります。

191
Nitzan Shaked
  • node index.jsを実行すると、Nodeは3000を使用します。

  • PORT=4444 node index.jsを実行すると、Nodeはこの例ではprocess.env.PORTに等しい4444を使用します。 1024未満のポートではSudoを付けて実行します。

59
Abdennour TOUMI

アプリケーションを別のサービス(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);
26
ThisClark

シナリオによっては、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
4
themefield

処理内容process.envグローバル変数は、アプリケーションが使用するために実行時にNodeによってインジェクトされ、アプリケーションの起動時のシステム環境の状態を表します。たとえば、システムにPATH変数が設定されている場合、これはprocess.env.PATHを通じてアクセス可能になります。これを使用して、バイナリの場所を確認し、必要に応じてバイナリを外部に呼び出すことができます。