Controlador
Controladores são basicamente classes responsáveis por tratar requisições e retornar respostas(dados) para o cliente. Cada controlador possui um propósito específico, que por sua vez é subdividido em ações específicas. E essas ações são executadas através de rotas ligadas a ela.
Exemplo de código de um controlador que estende de uma classe de controlador base.
import { ControllerBase } from '@jsagon/core'
class HomeController extends ControllerBase {
}
export default HomeController
Atualmente existem dois tipos de controladores padrões que é possível importar de @jsagon/core, ControllerBase e RestControllerBase.
ControllerBase
O ControllerBase é um modelo padrão, sua implementação é voltada normalmente para projetos que trabalharão também com Views, além das comunicações json, etc. Isso porque internamente o sistema possui um modelo de mapeamento de Views, ou seja, o desenvolvedor não precisa escrever manualmente o caminho da view, o caminho é criado internamente com base nas convenções de pastas e arquivos.
Considere que o caminho do seguinte controlador se encontra em dev/src/app/FinancasWebsite/modules/Base/Controller/HomeController.ts e o seu código de implementação é:
import { ControllerBase, Request, Response } from '@jsagon/core'
class HomeController extends ControllerBase {
public async contato(req: Request, res: Response) {
return this.render({email: "contato@exemplo.com"})
}
}
export default HomeController
Levando em consideração o caminho do Controlador e seu método contato (ação a ser chamada na rota), a view a ser mostrada deverá estar em resource/views/app/financas-website/base/home/contato.hbs.
Propriedades e métodos internos do ControllerBase
viewPath | caminho da view. |
layout | caminho do layout da aplicação. |
request | métodos e dados da requisição realizada (similar ao Express). |
response | métodos e dados de resposta, a serem enviados para o usuário (similar ao Express). |
index | método público para renderização padrão da view |
create | método público para renderização padrão da view |
edit | método público para renderização padrão da view |
detail | método público para renderização padrão da view |
render | método padrão responsável por renderizar um arquivo/página |
RestControllerBase
Controlador específico para aplicações do tipo Restful. Dispensa tratamento com views, e entre outros relacionados.
Propriedades e métodos internos do RestControllerBase
request | métodos e dados da requisição realizada (similar ao Express). |
response | métodos e dados de resposta, a serem enviados para o usuário (similar ao Express). |
Exemplo de implementação:
import { RestControllerBase, Request, Response } from '@jsagon/core'
class ProdutoController extends RestControllerBase {
public async list(req: Request, res: Response) {
return res.json([{id:1, nome: 'Empresa ação 1'}, {id:2, nome: 'Empresa ação 2'}])
}
}
export default ProdutoController
Caso definíssemos a rota financas.com/app/produtos apontando para o método list deste controlador e o requisitássemos, seria retornado o json em questão como resposta.
Para um melhor entendimento de como funciona um Controlador, e como suas ações podem ser executadas, é preciso entender o conceito e a implementação de Rotas.