Я пытаюсь создать простую CMS с express.js, которая динамически создает маршруты. Он получает JSON из базы данных, которая выглядит следующим образом:Лучший способ динамической маршрутизации с помощью Express.js (node.js)
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 с помощью app.routes = nul, но ничего не сделал, старые маршруты все еще были на месте.
Одна вещи, которая действительно удалить их была
delete app._router.map.get;
app._router.map.get = [];
Но это на самом деле удалить их и безопасно использовать, так что я не до конца угона огромного количества оперативной памяти, если маршрутизатор продолжает получать заселен?
AFAIk express сохраняет все маршруты в app._router.map, поэтому это должно работать. –
supernova
Есть ли какие-либо кеши, связанные с рендером, о котором я должен беспокоиться. Или они просто удалены с app._router.map, так как они находятся под ним? –
в режиме производства выражает представления кэшей, кэш можно получить через app.cache [viewname]. – supernova