私は、これは単純なJavascriptのスコープの問題(図に行く)であると確信しているが、私はいくつかの異なる方法を試してみたし、これが動作するように見えることはできません。HTTP/HTTPS可変エクスプレスサーバ
アイデアはexpress.createServer()を呼び出してHTTPにExpress.jsサーバのデフォルトは、しかし任意./conf/cert.pemと./conf/keyの検出時にHTTPSに切り替えることです.pem。私は2番目のコールバック引数はブール値の結果が含まれていることにより、ノードのpath.existsへの非同期呼び出し()を使用しています。
私は順序がそうでない場合は保証されませんので、それは(私たちは2つのファイルが存在するか否かの結果を知る)「安全」になるまでHTTPSサーバが作成されないように、彼らは現在、ネストされています。しかし、私が言及したように、いくつかの異なる方法を試しましたが、外側ののアプリケーションを変更することはできません。
私は私が今見ていないんだけど、任意の助けをいただければ幸い簡単な修正があると確信しています!
app = module.exports = express.createServer();
path.exists('./conf/key.pem', function(exists){
var keyExists = exists;
path.exists('./conf/cert.pem', function(exists) {
var certExists = exists;
if (keyExists && certExists) {
app = express.createServer({
key: fs.readFileSync('./conf/key.pem'),
cert: fs.readFileSync('./conf/cert.pem')
});
}
});
});
path.existsSync()メソッドを指摘してくれてありがとう!私は実際に古いバージョンのドキュメントを見ていました(私が怠け者であり、ノードのホームページに移動するのではなく、リンクのためにグーグルを探していました:D)。確かに物事が楽になる!コードは現在、よりクリーンで危険性は低いですが、私はまだ同じスコープの問題を抱えています。 * module.exports = app *の後でさえ、appは* configure *ブロックに到達すると未定義です。 –
**アップデート**:それを考え出しました。今、素晴らしい作品、ありがとう!また、以前のメモに対処するために、HTTPSサーバーの実行は以前に生成された証明書によって異なります。私はすべてを自動化するビルドプロセスを将来作成しようとしていますが、その間に依存関係を回避しています。さらに、私はHTTPS上で動作するほとんどのインスタンスを描いていますが、必要に応じて通常のHTTPを使用できないようにエンドユーザーを夢中にしたくありません。最終的には、明示的な選択を指定するための設定ファイルをいくつか作成します。 –