我正在使用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}}
问题是,当新对象插入数据库时,这不会更新导航,因为此代码仅在服务器启动时执行,并且需要重新启动服务器才能读取新的更改数据库。
在数据库更新时,建议使用哪种方法来监视数据库更新并刷新导航对象?
答案 0 :(得分:0)
不要编写generators.navigation();在服务器启动。 nodejs中提供的钩子在请求/请求之前被触发,因此您可以使用此钩子来调用generators.navigation()函数。正如iam假设将在函数上添加导航项到数据库。因此,只要该请求完成,您就可以在请求挂钩
之后调用该请求中的generators.navigation()