我正在使用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