我敢肯定,這只是一個簡單的Javascript範圍問題(去圖),但我已經嘗試了幾種不同的方式,似乎無法得到這個工作。可變的HTTP/HTTPS快速服務器
的想法是,在Express.js服務器默認HTTP與呼叫到express.createServer(),但任選地在檢測到的./conf/cert.pem和./conf/key切換到HTTPS .pem。我正在使用異步調用Node的path.exists(),由此第二個回調參數包含布爾結果。
我把它們嵌套在當前,這樣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()方法!實際上,我正在查看舊版本的文檔(源於我懶惰,谷歌搜索鏈接,而不是導航到Node主頁:D),它沒有同步版本。它確實讓事情變得更簡單!儘管現在代碼當然更清潔/更少危險,但我仍然有相同的範圍問題。即使在* module.exports = app *之後,應用程序在下載到* configure *塊時也是未定義的。 –
**更新**:找出來。非常好,謝謝!爲了解決以前的注意事項,運行HTTPS服務器取決於之前生成的證書。雖然我打算在將來實現一切自動化的構建過程,但我在此期間避開了依賴關係。此外,儘管我大多數情況下都是通過HTTPS進行操作的,但我不希望終端用戶無法使用普通的HTTP(如果需要的話)。最終我會創建一些配置文件來指定明確的選擇。 –