Desenvolvimento Back-end Node

NestJS com template engine handlebars

Neste artigo vamos aprender a configurar o NestJS com o handlebars, uma template engine que permite criarmos views dinâmicas e robustas.

há 1 ano 1 semana

Formação Desenvolvedor Node Full-Stack
Conheça a formação em detalhes

Neste artigo, nós mostraremos a você como configurar e utilizar a template engine handlebars com o NestJS. Para começar, é fundamental que você tenha o Node.js instalado e configurado em seu sistema.

Node.js - Fundamentos
Curso Node.js - Fundamentos
Conhecer o curso

Você pode conferir um passo a passo detalhado em nosso artigo sobre a Instalação do Node.js para Windows, Mac e Linux.

Instalação e configuração do handlebars

Feito isso, é necessário instalar o NestJS. Para realizar essa instalação, basta executar o seguinte comando:

npm i -g @nestjs/cli

O próximo passo é criar um projeto. Para isso, podemos executar o comando:

nest new project-name

Em “project-name” nós devemos escolher um nome para o projeto, neste exemplo, vamos utilizar o nome “hbs”.

Obs: para este exemplo, nós selecionamos o npm como gerenciador de pacotes.

A aplicação criada terá a seguinte estrutura:

src
	app.controller.spec.ts
	app.controller.ts
	app.module.ts
	app.service.ts
	main.ts

Agora, vamos instalar o handlebars executando o seguinte comando:

npm install --save hbs

Finalmente, a estrutura da aplicação foi criada e a template engine instalada, entretanto, é necessário efetuar algumas configurações para que o NestJS possa utilizar o handlebars. Para isso, vamos configurar o arquivo main.ts da seguinte maneira:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { NestExpressApplication } from '@nestjs/platform-express';
import { join } from 'path';

async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);

  app.useStaticAssets(join(__dirname, '..', 'public'));
  app.setBaseViewsDir(join(__dirname, '..', 'views'));
  app.setViewEngine('hbs');

  await app.listen(3000);
}
bootstrap();

Nós configuramos o handlebars como template engine padrão no código acima. Além disso, definimos a pasta “public” como diretório estático, que contém arquivos públicos como CSS e JavaScript. É importante destacar que podemos utilizar outras ferramentas, como o Bootstrap, juntamente com o handlebars.

Também apontamos um diretório chamado “views”, que será onde os arquivos do handlebars serão armazenados. Portanto, é fundamental que você crie o diretório “views” na raiz do seu projeto.

Criando e renderizando uma view

Neste momento vamos criar uma view chamada index.hbs dentro da pasta “views”:

<!DOCTYPE html>
<html>
  <head>
    <title>Uma View com Handlebars</title>
  </head>
  <body>
    <h1>NestJS com Handlebars!</h1>
  </body>
</html>

O próximo passo é configurar o app.controller.ts, da seguinte forma:

import { Controller, Get, Render } from '@nestjs/common';

@Controller()
export class AppController {
  @Get()
  @Render('index')
  index() {
    //
  }
}

Veja que criamos o método index(), que recebe dois decorators:

  • “Get”: Responsável por apontar qual o verbo HTTP que será utilizado na requisição.
  • “Render”: Responsável por renderizar a view que será passada como parâmetro.

Observação: Neste caso, será renderizada a view de mesmo nome que se encontra na pasta “views”, conforme configurado no main.ts.

Por fim, podemos testar a aplicação. Para isso, execute o comando npm run start e abra o navegador em http://localhost:3000. A view index.hbs será renderizada:

exibindo uma view handlebars com dados simples

Renderizando dados com handlebars

Nest.js - Fundamentos
Curso Nest.js - Fundamentos
Conhecer o curso

Uma das vantagens de utilizar uma template engine é a possibilidade de criar views dinâmicas, como, renderizar dados enviados do back-end para o front-end. Então, vamos retornar uma informação do controller para a view da seguinte maneira:

import { Controller, Get, Render } from '@nestjs/common';

@Controller()
export class AppController {
  @Get()
  @Render('index')
  index() {
    return { mensagem: 'Veja a formação de NestJS da TreinaWeb!' };
  }
}

Agora é possível renderizar a string “Veja a formação de NestJS da TreinaWeb!” para a view:

<!DOCTYPE html>
<html>
  <head>
    <title>Uma View com Handlebars</title>
  </head>
  <body>
    <h1>NestJS com Handlebars!</h1>
    <p>{{mensagem}}</p>
  </body>
</html>

Veja no código acima onde adicionamos um parágrafo, o resultado será o seguinte:

exibindo uma view handlebars com dados dinâmicos

Conclusão

Neste artigo, nós aprendemos como configurar a template engine handlebars para ser utilizada em conjunto com o NestJS, permitindo que você crie views dinâmicas e robustas.

Caso tenha ficado alguma dúvida você pode acessar o repositório deste exemplo para futuras consultas neste repositório do GitHub.

Por fim, caso queira aprender mais sobre NestJS saiba que aqui na TreinaWeb temos o curso Nest.js - Fundamentos que possui 02h07 de vídeos e um total de 18 exercícios. Conheça também nossos outros cursos de TypeScript.

Veja quais são os tópicos abordados durante o curso de Nest.js - Fundamentos:

  • Conhecendo a estrutura;
  • Utilizando Nest CLI
  • Entendendo Rotas, Controllers e Views;;
  • Conexão com banco de dados;
  • Usando TypeORM;
  • Template Engine.

Autor(a) do artigo

Wesley Gado
Wesley Gado

Formado em Análise e Desenvolvimento de Sistemas pelo Instituto Federal de São Paulo, atuou em projetos como desenvolvedor Front-End. Nas horas vagas grava Podcast e arrisca uns três acordes no violão.

Todos os artigos

Artigos relacionados Ver todos