¿Cómo manejar diferentes acciones del mismo controlador en Express.js?
Pregunta
Tengo muchas rutas como:
//routes
app.get("page1/:action", function(req, res) {
...
}
app.get("page2/:action", function(req, res) {
...
}
dónde page1
y page2
son dos controladores y el :action
es el "método" que necesito llamar. Las páginas deberían ser:
- /Page1/Eliminar
- /página1/modificar
- /página1/agregar
Intento organizar mi código para simplificar el trabajo después de un sistema MVC. ¿Alguien podría darme un consejo sobre cómo puedo llamar al método de un controlador leyendo el parámetro que uso como :action
Necesito verificar si el método existe si no (si alguien escribe /page1/blablabla
) Devuelve un error 404 HTTP.
¡Gracias!
Solución
Aquí hay un ejemplo sobre cómo lograr esto. Puede leer más sobre esto en la Guía 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;
});
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow