Próbuję utworzyć prosty CMS z plikiem express.js, który dynamicznie tworzy trasy. Robi się JSON z bazy danych, która wygląda następująco:Najlepszy sposób na dynamiczne kierowanie za pomocą 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'}
}
}
i iteracje nad obiektami tworzących trasy tak:
Object.keys(pagesfromdb).forEach(function(key) {
var page = pagesfromdb[key];
app.get(page.global.paths,function(req, res){
res.render(page.render, page[language]);
});
});
Teraz wszystko działa poprawnie. Problem polega jednak na tym, że za każdym razem, gdy użytkownik modyfikuje zawartość i ścieżki, należy zrestartować całą aplikację węzła. Nie znalazłem żadnych wywołań interfejsu API, aby usunąć trasy.
Czy istnieje sposób na bezpieczne usunięcie starego zestawu tras za pomocą aplikacji app.get? Czy powinienem to zrobić?
Czy jest lepszy sposób na robienie tego rodzaju trasowania? Podoba mi się ta metoda, ponieważ pozwala mi korzystać z wbudowanej funkcji, jest szybka i obsługuje regex.
Próbowałem usunąć całą app.routes za pomocą app.routes = nul, ale nic nie dało, stare trasy były nadal na miejscu.
Jedną rzeczą, która rzeczywiście je usunąć był
delete app._router.map.get;
app._router.map.get = [];
Ale czy to rzeczywiście je usunąć i jest bezpieczny w użyciu, więc nie kończy się porwania ogromne ilości pamięci RAM, czy router staje się coraz odbudowane?
Ekspres AFAIk przechowuje wszystkie trasy w app._router.map, więc to powinno działać. –
supernova
Czy są jakieś pamięci podręczne związane z renderowaniem, o które powinienem się martwić. Czy są one po prostu usuwane z app._router.map, ponieważ są one tuż pod nim? –
w trybie ekspresowym widoki pamięci podręcznej, pamięć podręczna jest dostępna za pośrednictwem app.cache [nazwa widoku]. – supernova