Ich versuche, ein einfaches CMS mit express.js zu erstellen, das dynamisch Routen erstellt. Es wird eine JSON aus einer Datenbank, die wie folgt aussieht:Die beste Methode für dynamisches Routing mit 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'}
}
}
und iteriert über die Objekte zu schaffen Routen wie so:
Object.keys(pagesfromdb).forEach(function(key) {
var page = pagesfromdb[key];
app.get(page.global.paths,function(req, res){
res.render(page.render, page[language]);
});
});
Jetzt funktioniert alles einwandfrei. Das Problem ist jedoch, dass jedes Mal, wenn ein Benutzer den Inhalt und die Pfade ändert, die gesamte Knoten-App neu gestartet werden muss. Ich habe keine API-Aufrufe gefunden, um Routen zu entfernen.
Gibt es eine Möglichkeit, die alten Routen, die mit app.get gesetzt wurden, sicher zu entfernen? Soll ich das überhaupt tun?
Gibt es eine bessere Möglichkeit, diese Art von Routing zu tun? Ich mag diese Methode, da sie mir die eingebaute Funktion erlaubt, schnell ist und Regex unterstützt.
Ich habe versucht, die ganze app.routes mit app.routes = nul zu entfernen, aber es hat nichts gemacht, die alten Routen waren immer noch vorhanden.
Eine Sache, die in der Tat, sie haben entfernen war
delete app._router.map.get;
app._router.map.get = [];
Aber ist diese sie tatsächlich entfernen und ist es sicher zu verwenden, so dass sie am Ende ich nicht große Mengen an RAM Hijacking, wenn der Router hält neu besiedelt zu werden?
AFAIk Express hält alle Routen in App._router.map so sollte dies funktionieren. –
supernova
Gibt es Caches im Zusammenhang mit dem Render, um den ich mich sorgen sollte? Oder werden sie nur mit der app._router.map entfernt, da sie gerade darunter liegen? –
im Produktionsmodus Express Caches Ansichten, der Cache kann über app.cache [viewname] zugegriffen werden. – supernova