我正在使用Express,並且正在從數據庫生成頁面。在服務器啓動時,我有導航生成。Express - 數據庫內容更改時刷新視圖變量
此塊是在服務器啓動時運行:
database.connect()
.then(() => {
generators.navigation();
})
.catch(err => {
console.log(err);
process.exit();
});
我有這樣的代碼生成導航:
generators.navigation = function(){
var db = require('./database.js').db;
var data = db.collection('navigation').find({},{_id:0,path:1,title:1});
var nav = []
data.on('data', doc => {
nav.push(doc)
})
data.on('end',() => {
generators.navigation = nav;
})
}
,然後在頁面渲染中使用:
for (let page of pages) {
if(req.params.path === page.path){
res.render(page.type, {
page:page,
navigation:generators.navigation,
helpers:helpers
});
}//if
}//for
而且在我看來(使用車把):
{{#if_eq page.contents.nav.type 'default'}}
{{#each navigation}}
<a class="item no-mobile" href="{{this.path}}">{{this.title}}</a>
{{/each}}
{{/if_eq}}
問題是,當新對象插入數據庫時,這不會更新導航,發生這種情況是因爲此代碼僅在服務器啓動時執行,並且需要重新啓動服務器才能讀取新的更改數據庫。
當數據庫更新時,推薦使用哪種方式來監視數據庫更新和刷新導航對象?
可能最合適的解決方案是觸發每個數據庫更新的導航結構更新,您可以使用WebSocket實現實時輪詢。 http://socket.io/是一個很好的庫,用於實時更新 – Andrii