[這個問題是相當模糊的,我爲此道歉。我試圖回答自己的問題]正確腳手架的Node.js應用程序,而不快遞(應用程序不接受請求)
我的建築內,在給定的時間間隔執行各種任務的Node.js應用程序,以解決我的種種煩惱。這裏是全球腳手架(包括青鳥承諾和貓鼬爲DB交互):
var Promise = require("bluebird");
var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
// Personal modules
var bootApp = require(...);
var doStuffA = require(...);
var doStuffB = require(...);
var doStuffC = require(...);
// running locally, but meant to be deployed at some point
mongoose.connect('mongodb://localhost:27017/myDatabase');
var db = mongoose.connection;
db.on('error',() => {
console.log("Error : lost connection !"));
process.exit(1);
});
db.once('open',() => {
\t
bootApp() // always start by booting
.then(() => { // then start the infinite loop of events
setInterval(doStuffA, 1000*60*60); // 1x/1h
setInterval(doStuffB, 1000*60*10); // 1x/10min
setInterval(doStuffC, 1000*60*3); // 1x/3min
}).catch((e) => { // errors are handled by doStuffX(), so we should never catch anything here
console.log(e.message);
process.exit(1);
});
});
每個模塊doStuffX
是返回一個承諾,處理自己的錯誤的功能,並且應該在某個時候完成。整個應用
預期的行爲:
- 的應用程序應該能夠永遠
- 運行應用程序應儘量
doStuffX()
在給定的時間間隔,無論是成功還是上次失敗。 - [可選:該應用程序應在接收到「關閉」信號平滑地關閉而不重試任何
doStuff
。
我的問題:如何建立一個乾淨的支架對於這樣的應用程序?我可以擺脫setInterval
並使用承諾嗎?我主要關心的一個問題是,確保之前的doStuffX()
實例在開始下一個實例之前完成,即使它涉及以某種方式「殺死」它。
我對任何有關腳手架應用程序的鏈接都開放,但請不要給我一個答覆/涉及EXPRESS的鏈接:我不需要快遞,因爲我的應用程序沒有收到任何請求。 (一切我迄今發現開始與快遞:/)
你爲什麼要擺脫'setInterval()'?您需要一個定時器才能執行循環函數調用。使用承諾無法替代'setInterval()',因爲這兩者是非常不同的動物,所以整個請求聽起來都是錯誤的。 – jfriend00
你的腳手架有什麼問題?它看起來會工作得很好。 – jfriend00
你確定要在任何數據庫錯誤時退出進程嗎?你不應該記錄這些錯誤,也許應該查看錯誤的類型來決定哪些操作是合適的? – jfriend00