Come gestire diverse azioni dello stesso controller in Express.JS?
Domanda
Ho molti itinerari come:
//routes
app.get("page1/:action", function(req, res) {
...
}
app.get("page2/:action", function(req, res) {
...
}
dove page1
e page2
sono due controller e il :action
è il "metodo" Devo chiamare. Le pagine dovrebbero essere:
- / page1 / delete
- / page1 / Modifica
- / page1 / add
cerco di organizzare il mio codice per semplificare il lavoro a seguito di un sistema di MVC.
Qualcuno potrebbe darmi un consiglio per quanto riguarda, come posso chiamare il metodo di un controller leggendo il parametro che uso come :action
ho bisogno di controllare se il metodo esiste se non (se qualcuno scrittura /page1/blablabla
) mi restituisce un Errore HTTP 404.
Grazie!
Soluzione
Ecco un esempio su come raggiungere questo obiettivo. Si può leggere di più su questo sulla guida Expressjs: http://expressjs.com/guide/error- handling.html
function NotFound(msg){
this.name = 'NotFound';
Error.call(this, msg);
Error.captureStackTrace(this, arguments.callee);
}
NotFound.prototype.__proto__ = Error.prototype;
//routes
app.get("page1/:action", function(req, res) {
switch(req.params.action) {
case 'delete':
// delete 'action' here..
break;
case 'modify':
// delete 'modify' here..
break;
case 'add':
// delete 'add' here..
break;
default:
throw new NotFound(); // 404 since action wasn't found
// or you can redirect
// res.redirect('/404');
}
}
app.get('/404', function(req, res){
throw new NotFound;
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow