Template Engine EJS - Node.js
Como alternativa ao Handlebars, vamos examinar brevemente o uso de outra template engine - EJS. Esta engine utiliza uma sintaxe amplamente inspirada na template engine Web Forms da plataforma ASP.NET, desenvolvido pela Microsoft.
Primeiro, adicionamos o pacote ejs ao projeto com o comando:
npm install ejs --save
No arquivo app.js
const express = require("express");
const app = express();
app.set("view engine", "ejs");
app.use("/contact", function(request, response) {
response.render("contact", {
title: "Meus Contatos",
emailsVisible: true,
emails: ["gg@mycorp.com", "lol@mycorp.com"],
phone: "+1234567890"
});
});
app.use("/", function(request, response) {
response.send("Página Principal");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));
Aqui, definimos o mesmo código de um dos tópicos anteriores, mas agora configuramos a engine ejs:
app.set("view engine", "ejs");
Em seguida, adicionamos à pasta views
.ejs
<!DOCTYPE html>
<html>
<head>
<title><%=title %></title>
<meta charset="utf-8" />
</head>
<body>
<h1><%=title %> em EJS</h1>
<% if(emailsVisible) { %>
<h3>Endereços de Email</h3>
<ul>
<% for(var i=0; i < emails.length; i++) { %>
<li><%=emails[i] %></li>
<% } %>
</ul>
<% } else { %>
<h3>Endereço de Email Ausente</h3>
<% } %>
<p>Telefone: <%=phone %></p>
</body>
</html>
Para trabalhar com o modelo de visualização, utilizamos expressões JavaScript, que são definidas com a tag <% expressão %>
<% for(var i=0; i < emails.length; i++) { %>
.........................
<% } %>
Ao acessar o endereço /contact

Templates Parciais
O EJS permite inserir código de um template em outro usando a função include
views
partials
menu.ejs
<nav><a href="/">Página Principal</a> | <a href="/contact">Contatos</a></nav>
O segundo arquivo, footer.ejs
<footer><p>MyCorp - Copyright © 2024</p></footer>
Agora, incluímos esses arquivos em contact.ejs
<!DOCTYPE html>
<html>
<head>
<title><%=title %></title>
<meta charset="utf-8" />
</head>
<body>
<%- include("partials/menu.ejs") %>
<h1><%=title %> em EJS</h1>
<% if(emailsVisible) { %>
<h3>Endereços de Email</h3>
<ul>
<% for(var i=0; i<emails.length; i++) { %>
<li><%=emails[i] %></li>
<% } %>
</ul>
<% } else { %>
<h3>Endereço de Email Ausente</h3>
<% } %>
<p>Telefone: <%=phone %></p>
<%- include("partials/footer.ejs") %>
</body>
</html>
A função include
app.js
