Ton*_*rpi 14 json router content-management-system node.js express
我正在尝试使用express.js创建一个动态创建路由的简单CMS.它从数据库中获取JSON,如下所示:
pagesfromdb = {
home = {
paths = ['/','/home','/koti'],
render = 'home.ejs',
fi_FI = {html='<h1>Hei maailma!</h1>'},
en_US = {html='<h1>Hello World!</h1>'}
},
about = {
paths = ['/about','/tietoja'],
render = 'general.ejs',
fi_FI = {html='Tietoja'},
en_US = {html='About Us'}
}
}
Run Code Online (Sandbox Code Playgroud)
并迭代创建路由的对象,如下所示:
Object.keys(pagesfromdb).forEach(function(key) {
var page = pagesfromdb[key];
app.get(page.global.paths,function(req, res){
res.render(page.render, page[language]);
});
});
Run Code Online (Sandbox Code Playgroud)
现在一切正常.但问题是,每次用户修改内容和路径时,都需要重新启动整个节点应用程序.我没有找到任何API调用来删除路由.
有没有办法安全地删除使用app.get设置的旧路由?我应该这样做吗?
有没有更好的方法来做这种路由?我喜欢这种方法,因为它允许我使用内置函数,速度快,支持正则表达式.
我尝试用app.routes = nul删除整个app.routes,但它没有做任何事情,旧的路线仍然存在.
确实消除它们的一件事是
delete app._router.map.get;
app._router.map.get = [];
Run Code Online (Sandbox Code Playgroud)
但是,这实际上是删除它们,是可以安全使用的,所以我不结束劫持RAM的海量如果路由器不断得到重新填充?
Max*_*Max 13
正如@supermova在评论中所说,可以即时更新Express.另一种需要考虑的架构是类似于传统的CMS(例如Wordpress).在其他CMS中,所有请求都转到相同的"回调",并且在每次请求中,您在数据库中查找要为该URL提供的页面.
app.get('/*', function (req, res) {
db.findPage({ slug: req.url}, function (err, pageData) {
res.render('page-template', {
pageContent: pageData.content,
pageTitle: pageData.title
});
});
});
Run Code Online (Sandbox Code Playgroud)
由于这种方法,速度显着下降,但最后我认为它更加明智.如果速度是一个巨大的问题,你可以设置一个缓存系统(如Varnish),但是会有令人头疼的方法即时修改Express路由.例如,如果必须扩展到两个Web服务器,该怎么办?如果服务器A获得"创建页面"请求并且它知道更新其路由,那么如何使它们保持同步,但是服务器B呢?随着每个请求进入数据库,您将能够更好地水平扩展.
| 归档时间: |
|
| 查看次数: |
21605 次 |
| 最近记录: |