Typescript: Crear router a partir de un controlador

// crea tu controlador con sus métodos de esta manera:
//   ['METODO /subruta/del/recurso']
// el espacio es importante
class FooController {
 ['GET /'](req: Request): Promise {
  // logic here
  return Promise.resolve("foo");
 }
 
 ['POST /bar](req: Request): Promise {
  return Promise.resolve("bar");
 }
}

// esta función se encarga de crear un router
function createRouter(ctrl){
  let router = express.Router();
  // iteramos todas las llaves (nombres de métodos)
  let routes = Object.keys(ctrl.constructor.prototype)
    // excluimos el constructor
    .filter(key => key != 'constructor')
    // por cada uno, se crea un arreglo [METODO, subruta]
    .map(key => key.split(" "));
  routes.forEach(route => {
    // instalamos las rutas en el router
    router[route[0]](route[1], function(req, res, next){
      ctrl[route.concat(" ")](req).then(r => res.send(r)).catch(next);
    });
  });
  return router;
}

// instalar usando la función
let fooRouter = createRouter(new FooController());
app.use('/foo', fooRouter);

0 comments on “Typescript: Crear router a partir de un controladorAdd yours →

Leave a Reply

Your email address will not be published. Required fields are marked *