2

私は socket.io アプリを作成していますが、heroku にプッシュするたびにフロントエンドの scripts.js ファイルに行を追加する必要があることにイライラしています。

var socket = io.connect('http://localhost');

var socket = io.connect('http://ersatz-elephant-1337.herokuapp.com/');

バックエンドでこれらの変数にアクセスするために使用できることはわかっていprocess.env.VARますが、フロントエンド スクリプトで使用する変数をプログラムで決定する方法があるかどうか疑問に思っています。これとは別に、スクリプトを静的のままにしたいのですが、それは不可能でしょうか?

編集:バックエンドでの解決策を実際に探しているわけではありません.../public/scripts.jsファイルが正しいものに接続できる方法を探しています。server.jsおそらくそれを行う唯一の方法は、静的に提供するのではなく、フロントエンドスクリプトファイルに特別なものを指定することだと思いますが、もしそうなら、それは私が探している命令であり、実際に環境変数にアクセスする方法ではありませんサーバー。混乱してすみません!

4

4 に答える 4

2

SOが1kビューに達したと私に言ったので、2.5年後にこの質問を見つけました。私が今この問題を解決する方法は、次のようなことを言うことだと思います

var isLocal = ~location.href.indexOf('://localhost');

そして、それを基に他の変数をベースにします。実際には環境変数を提供するわけではありませんが、使用するパスを自動的に知るという問題が解決されます。(この場合、おそらく言うだけio.connect('/')で十分でしょう。)

于 2015-11-20T09:09:45.383 に答える
0

環境変数を使用したソリューションを求められたことは承知していますが、ランタイム パラメータを使用する方が柔軟性が高いため、より優れたソリューションであると私は考えています。

上で述べたように、必要に応じて、(使用している OS に応じて) シェル スクリプトをいつでも使用して、環境変数に基づいてランタイム パラメータを設定できます。

引数を使用するには、 を使用しますprocess.argv。これを実行しforEachて、引数を反復処理できます ( node.js マニュアル プロセス argvを参照)。個人的にはモジュールを使用します。私が好きなのはoptと呼ばれるものです。多くの優れた機能があり、コマンドライン引数の処理が非常に簡単になります。デフォルトを指定したり、各パラメーターのヘルプ メッセージを定義したりできます。設定ファイルもサポートしています。これは魅力的だと思うかもしれません。

ただし、KISS アプローチが気に入った場合は、 を使用することをお勧めしprocess.argvます。

スクリプト内で環境変数を使用することに設定されている場合は、いつでもprocess.env.MY_ENV_VARIABLEwhere MY_ENV_VARIABLEis 環境変数を使用できます (ノード js で環境変数を読み取る方法を参照してください)。

于 2013-07-15T22:23:25.983 に答える