Router
A API do Protontype disponibiliza a classe ExpressRouter
para ser base dos routers.
Criando um Router
Para criar uma classe router basta estender a classe ExpressRouter
import { ExpressRouter } from 'protontype'; export class TasksRouter extends ExpressRouter { ... }
Para configurar uma classe Router deve-se usar o decorator @RouterClass()
import { ExpressRouter, RouterClass } from 'protontype'; @RouterClass({ baseUrl: "/tasks", middlewares: [ new MyMiddleware(), new OtherMiddleware() ] }) export class TasksRouter extends ExpressRouter { ... }
Uma classe Router poderá conter várias funções de rotas, chamadas Router Functions. Para definir e configurar uma router function deve-se usar o decorator @Route()
. Uma Router Function recebe como parâmetro um objeto do tipo RouterFunctionParams
import { ExpressRouter, RouterFunctionParams, Method, Route } from 'protontype'; @RouterClass({ baseUrl: "/tasks", middlewares: [ new MyMiddleware(), new OtherMiddleware() ] }) export class TasksRouter extends ExpressRouter { @Route({ endpoint: '/', method: Method.GET }) listTasks(params: RouterFunctionParams) { params.res.send({id: 1, title: 'Task de teste'}); } }
@RouterClass()
Usado para definir uma classe que contém rotas. Todas classes do tipo ExpressRouter
suportam esta anotação.
@RouterClass({ baseUrl: "/tasks", middlewares: [ new MyRouterMiddleware(), new OtherRouterMiddleware() ] })
Propriedades:
- baseUrl: Url base do roteador. Todas rodas serão criadas no padrão baseUrl + endpoint
- middlewares: Middlewares que atuarão para todas as rotas definidas neste router
@Route()
Usado para definir e configurar as rotas dentro de um router.
@Route({ endpoint: '/list', method: Method.GET, middlewares: [ new MyRouteMiddleware(), new OtherRouteMiddleware() ] })
Propriedades:
- endpoint: Define o endpoint da rota. A url desta rota será formada pela baseUrl (definida na
@RouterClass
) + endpoint. Exemplo: http://locathost/tasks/list - method: Verbo HTTP usado para esta rota. GET, POST, DELETE...
- middlewares: Middlewares que atuarão somente para esta rota específica
É possivel também usar o decorator @Route()
sem parâmetros, assim a router function deve criar as rotas diretamente usando o router do express.
@Route() public rootRoute(): void { this.router.get("", (req, res) => res.sendFile('routes.html', { "root": "./src/views" }) ); }
RouterFunctionParams
Toda Router Function deve ter como parâmetro um objeto do tipo RouterFunctionParams
@Route({ endpoint: '/', method: Method.GET }) listTasks(params: RouterFunctionParams) { console.log(params.req); console.log(params.res); console.log(params.app); }
Propriedades: