Modelos

Modelos permitem escrever páginas HTML e manipular seu conteúdo, injetando valores de variáveis vindas do código JavaScript do lado servidor. Para tanto, usa-se uma sintaxe especial para escrever o código JavaScript junto do código HTML.

  1. Definindo o mecanismo de visualização
  2. Definindo o arquivo de modelo
  3. Passando variáveis para o modelo
  4. Marcações EJS
  5. Código completo
  6. Referências

Definindo o mecanismo de visualização

Para usar modelos, é necessário definir o mecanismo de visualização da aplicação. Existem diversos mecanismos de visualização, mas nessa seção focaremos no que vamos utilizar, chamado EJS.

Veja outros mecanismos de visualização aqui.

Para instalar o EJS, faça:

npm install ejs --save

Use a aplicação a seguir como referência para a implementação. Logo abaixo da declaração das constantes, adicione app.set('view engine', 'ejs').

const express = require('express')
const app = express()
const port = 3000

app.set('view engine', 'ejs')

app.get('/', function(req, res) {
  res.send('Hello World!')
})

app.listen(port, function() {
  console.log(`Rodando na porta ${port}!`)
})

Definindo o arquivo de modelo

Os modelos ficam guardados em um diretório views na raiz do projeto. Você deverá criar o arquivo views\index.ejs. No código JavaScript, chamaremos esse modelo por “index”. No código JavaScript, não é necessário especificar o diretório ou extensão. Faça o mesmo para definir novos modelos.

O conteúdo do arquivo views\index.ejs não será diferente de código HTML já visto antes. Logo veremos como trazer valores de variáveis do código Node.js.

<h1>Hello world!</h1>

No código JavaScript, faça:

const express = require('express')
const app = express()
const port = 3000

app.set('view engine', 'ejs')

app.get('/', function(req, res) {
  res.render("index")
})

app.listen(port, function() {
  console.log(`Rodando na porta ${port}!`)
})

Na rota “/”, em vez de chamar res.send, chamamos res.render, passando o nome do modelo (“index”, nesse caso). Isso fará com que o conteúdo definido em views/index.ejs seja renderizado, ou seja, mostrado no navegador.

Passando variáveis para o modelo

Às vezes, é necessário passar valores do seu código node para o modelo. Isso pode ser feito através de variáveis locais passadas através da função render(). A função render() pode receber dois parâmetros: o nome do modelo criado no diretório “views” e um objeto com as variáveis locais que você acessará no modelo. Na chamada a seguir, a variável name estará disponível no modelo “usuario.ejs”.

res.render('usuario', { name: 'Antonio' })

Caso precise passar mais de uma variável local, basta adicionar um novo parâmetro.

res.render('usuario', { name: 'Antonio', email: 'antonio@email.com' })

Marcações EJS

No modelo, há uma sintaxe especial para exibir o valor de variáveis, bem como executar código JavaScript para montar a estrutura da página. Ainda é possível carregar um arquivo JavaScript que cumpra esse papel do lado cliente (através da marcação <script>). O código JavaScript escrito dentro das marcações EJS é controlado pelo servidor e por isso é diferente de um código carregado através de <script>.

Existem tipos diferentes de marcações de abertura e encerramento.

  • Marcações de abertura
    • <%=: Saída escapada
    • <%-: Saída não-escapada
    • <%#: Comentário
    • <%: Scriptlet
    • <%_: Scriptlet, remove os espaços em branco precedentes
  • Marcações de encerramento
    • %>: Marcação de encerramento regular
    • -%>: Remove os caracteres de nova linha no fim
    • _%>: Remove todos os caracteres em branco no fim

Para mais informações sobre cada uma das marcações, veja “EJS Syntax Reference” nas Referências.

No modelo “usuario.ejs”, referenciado acima, para acessar as variáveis locais, podemos fazer como no código a seguir.

<h1>Página do usuário</h1>
<p>Nome: <%= name %></p>
<p>Email: <%= email %></p>

Código completo

O código desenvolvido nesta seção encontra-se no Codesandbox a seguir.

Referências

  1. EJS Syntax Reference