我正在尝试使用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'}
}
}
并遍历对象以创建路由,如下所示:
Object.keys(pagesfromdb).forEach(function(key) {
var page = pagesfromdb[key];
app.get(page.global.paths,function(req, res){
res.render(page.render, page[language]);
});
});
现在一切正常。但是问题在于,每次用户修改内容和路径时,都需要重新启动整个节点应用程序。我没有找到任何API调用来删除路由。
有什么方法可以安全地删除通过app.get设置的旧路由吗?我应该这样做吗?
有没有更好的方法来进行这种路由?我喜欢这种方法,因为它允许我使用内置函数,速度很快并且支持正则表达式。
我尝试使用app.routes = nul删除整个app.routes,但是它什么也没做,旧路由仍然存在。
确实删除了它们的一件事是
delete app._router.map.get;
app._router.map.get = [];
但这是否确实将它们移除了,并且使用起来安全吗?如果路由器不断被填充,我不会最终劫持大量的ram?
正如@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
});
});
});
这种方法的结果是速度显着下降,但最终我认为它更为理智。如果速度是一个很大的问题,则可以设置一个缓存系统(例如Varnish),但是动态修改Express路由的方法会让人头疼。例如,如果必须扩展到两个Web服务器怎么办?如果服务器A收到“创建页面”请求,因此知道如何更新其路由,如何使它们保持同步,但是服务器B呢?随着每个请求进入数据库,您将能够更好地横向扩展。
问题内容: 我有一个如下所示的route.js: 考虑到我要创建200多种不同的路线,最终我会遇到诸如“ article1”,“ article2”等内容 而我的app.js就像: 有没有动态的方式来创建这个? 问题答案: 终于成功了。 在我遇到的情况下,第1条,第2条等: 在获得多级网址的情况下,我创建了一个自定义函数:
在我的React项目中,我有: 没有标题的登录组件 问题:我应该如何构建我的路由器从登录页面开始,当我点击登录时,路由器会把我带到仪表板?
本文向大家介绍Node.js 使用Mongoose和Express.js路由在MongoDB中查找数据,包括了Node.js 使用Mongoose和Express.js路由在MongoDB中查找数据的使用技巧和注意事项,需要的朋友参考一下 示例 设定 首先,使用以下命令安装必要的软件包: 代码 然后,将依赖项添加到server.js,创建数据库模式和集合名称,创建Express.js服务器,并连接
本文向大家介绍Node.js 使用Mongoose和Express.js路由将数据保存到MongoDB,包括了Node.js 使用Mongoose和Express.js路由将数据保存到MongoDB的使用技巧和注意事项,需要的朋友参考一下 示例 设定 首先,使用以下命令安装必要的软件包: 代码 然后,将依赖项添加到server.js文件中,创建数据库模式和集合名称,创建Express.js服务器,
问题内容: 我已经阅读了一些有关如何将Mongo与Node结合使用的指南,它们似乎都以不同的方式连接到数据库。一种对我有效的特定方式是: 但是,这对我来说似乎效率低下/很奇怪,每当出现时,我就不得不重新连接到数据库,例如用于创建新用户或检索信息。 似乎更适合我的另一种方法是 我已经看到有几个网站可以按照这些方式进行操作,但是我个人无法满足上述要求。我一直在服务器端收到错误消息。因此,我的问题是,如
问题内容: 我目前正在我的app.js / server.js文件中提供我所有的html,如下所示: 我想如果我有15个以上的html页面,那可能不是调用它们的最佳方法。是否有更好的方法可以从另一个文件或位置为它们提供服务,并使用导出或仅能在app.js上调用一个函数或某些东西的服务。这可能是路由的目的,但也许我不太了解。 (添加了同一文件中的更多代码) 问题答案: 您可以使用中间件: 一个服务器