Node.js: Criando um servidor REST com o Padrão MVC utilizando o Framework Express

Olá, já faz um bom tempo que não escrevo por aqui. Estou com pouco tempo livre devido a meu projeto de mestrado. Neste post falarei sobre parte de um projeto recente que venho desenvolvendo, durante o qual precisei criar um servidor REST com Node.js.

Sou um grande fã de CakePHP, pois foi o primeiro framework para web que tive contato, e com o qual aprendi bastante. Talvez por isso, sempre que aprendo uma nova linguagem, procuro encontrar analogias com alguma parte do CakePHP que eu já conheço. Sendo assim, procurei deixar a estrutura da aplicação o mais parecida possível com o que eu utilizava com CakePHP.

obs: se você não está familiarizado com o padrão MVC, leia este artigo.

Neste projeto, a maioria dos métodos dos models utilizam o pacote Bluebird para promessas. Além disso, o banco de dados que escolhi foi o MySQL. Algumas alterações na camada demodels podem ser necessárias se você quiser utilizar outro banco de dados.

O fonte completo da aplicação pode ser baixado aqui.

Estrutura básica da aplicação

Se você já estiver acostumado com o padrão MVC, não terá dificuldades para entender a função de cada diretório da aplicação. Há um diretório para os controllers e um para osmodels, mas nenhum para as views. Optei por retornar os dados do servidor apenas no formato JSON. Caso você deseje suporte para mais formatos, pode utilizar uma camada deviews separada da dos controllers para isso.

Antes de tudo, edite o arquivo config/config.js com as configurações de acesso ao banco de dados e a porta a ser utilizada pela aplicação. Você também pode especificar a porta através da variável de ambiente PORT.

Rotas

O Framework Express já possui um sistema de rotas bastante interessante, então pouco trabalho foi preciso aqui.

Cada controller possui uma função addRestRoutes que adiciona as rotas básicas do servidor automaticamente. Essas rotas mapeiam para ações presentes na classe Controller. Cadacontroller da sua aplicação deve herdar os métodos da classe Controller.

As rotas padrões são no formato a seguir:

  • GET /blog/1: mapeia para a ação findById
  • POST /blogs/searches: mapeia para a ação search
  • POST /blogs: mapeia para a ação create
  • PUT /blog/1: mapeia para a ação edit
  • DELETE /blog/1: mapeia para a ação delete

As ações search, create e edit requerem que alguns parâmetros sejam passados no corpo da requisição.

Para a ação de busca, os parâmetros devem ser passados seguindo o formato a seguir:

Para as ações create e put, devem ser passados os dados a serem salvos no banco de dados.

Se o controller possuir alguma rota que saia deste padrão, elas podem ser adicionadas pelo método addCustomRoutes como a seguir:

Controllers

A estrutura básica para um controller é a seguir.

O arquivo acima deve se chamar CarsController.js e estar na pasta controllers.

Models

Os models precisam de algumas configurações para o correto funcionamento dos métodos da classe Model. Um model básico é apresentado a seguir.

Os principais métodos herdados da classe Model são listados abaixo.

Model.find

Realiza uma consulta ao banco de dados.

Exemplo de Uso

Parâmetros

  • conditions : array de condições no formato do pacote squel
  • limit : máximo de registros para serem retornados
  • offset : números de registros para serem pulados
  • group : cláusula SQL group by
  • recursive : nível de recursividade para buscar por registros nos models com os quais este está associado

Model.findById

Busca por um registro com determinado id. Seu único parâmetro é o id do objeto a ser buscado. Este método retorna uma promessa rejeitada se não houver registro com o id especificado.

Model.save

Cria ou atualiza um registro já existente no banco de dados.

Exemplos de Uso

Model.delete

Remove um registro do banco e dados. Seu único parâmetro é o id do registro a ser removido.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *