Sto provando a creare un semplice CMS con express.js che crea dinamicamente percorsi. ottiene un JSON da un database che assomiglia a questo:Il modo migliore per eseguire il routing dinamico con 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'}
}
}
e un'iterazione sopra gli oggetti che creano percorsi in questo modo:
Object.keys(pagesfromdb).forEach(function(key) {
var page = pagesfromdb[key];
app.get(page.global.paths,function(req, res){
res.render(page.render, page[language]);
});
});
Ora tutto funziona bene. Ma il problema è che ogni volta che un utente modifica il contenuto e i percorsi, è necessario riavviare l'intera app del nodo. Non ho trovato alcuna chiamata API per rimuovere percorsi.
C'è un modo per rimuovere in modo sicuro i vecchi percorsi impostati con app.get? Dovrei farlo anche io?
Esiste un modo migliore per eseguire questo tipo di instradamento? Mi piace questo metodo in quanto mi permette di utilizzare la funzione integrata, è veloce e supporta regex.
Ho provato a rimuovere l'intero app.routes con app.routes = nul ma non ha fatto nulla, le vecchie rotte erano ancora sul posto.
Una cosa che ha effettivamente rimuoverli era
delete app._router.map.get;
app._router.map.get = [];
Ma questo in realtà rimuoverli ed è sicuro da usare in modo da non finire dirottamento enormi quantità di RAM se il router mantiene sempre ripopolata?
AFAIk express mantiene tutti i percorsi in app._router.map quindi questo dovrebbe funzionare. –
supernova
Ci sono delle cache relative al rendering di cui dovrei preoccuparmi. Oppure vengono semplicemente rimossi con app._router.map poiché sono appena sotto di esso? –
in modalità di visualizzazione delle cache in modalità di produzione, è possibile accedere alla cache tramite app.cache [viewname]. – supernova