Helpers no Handlebars no Express com Node.js
Helpers são funções que retornam uma string. Esta string pode ser adicionada a qualquer lugar de templates e pode representar até mesmo código HTML.
Helpers otimizam a criação de código para templates. Podemos definir uma função helper uma vez e usá-la em vários lugares para gerar código.
Para usar helpers, vamos alterar o código do arquivo app.js:
const express = require("express");
const hbs = require("hbs");
const app = express();
hbs.registerHelper("getTime", function () {
  const myDate = new Date();
  const hour = myDate.getHours();
  let minute = myDate.getMinutes();
  let second = myDate.getSeconds();
  if (minute < 10) {
    minute = "0" + minute;
  }
  if (second < 10) {
    second = "0" + second;
  }
  return `Hora atual: ${hour}:${minute}:${second}`;
});
app.set("view engine", "hbs");
app.get("/", function (_, response) {
  response.render("home.hbs");
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));Um helper é definido usando a função hbs.registerHelper(). O primeiro parâmetro é o nome do helper e o segundo é a função que retorna a string. Neste caso, retorna a hora atual.
Vamos agora definir o código do arquivo home.hbs:
<!DOCTYPE html>
<html>
  <head>
    <title>Página Principal</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <h1>Página Principal</h1>
    <div>{{getTime}}</div>
  </body>
</html>Estrutura do projeto:
my-express-app/ │ ├── app.js ├── package.json │ ├── views/ │ └── home.hbs │ └── node_modules/
Para chamar o helper, usamos o nome do helper dentro de chaves duplas:

Um helper pode retornar não apenas uma string, mas também código HTML. Além disso, podemos passar parâmetros ao helper que serão usados no resultado. app.js:
const express = require("express");
const hbs = require("hbs");
const app = express();
hbs.registerHelper("getTime", function () {
  const myDate = new Date();
  const hour = myDate.getHours();
  let minute = myDate.getMinutes();
  let second = myDate.getSeconds();
  if (minute < 10) {
    minute = "0" + minute;
  }
  if (second < 10) {
    second = "0" + second;
  }
  return `Hora atual: ${hour}:${minute}:${second}`;
});
hbs.registerHelper("createStringList", function (array) {
  let result = "";
  for (let i = 0; i < array.length; i++) {
    result += `<li>${array[i]}</li>`;
  }
  return new hbs.SafeString(`<ul>${result}</ul>`);
});
app.set("view engine", "hbs");
app.get("/", function (_, response) {
  response.render("home.hbs", {
    fruit: ["maçã", "limão", "banana", "uva"],
  });
});
app.listen(3000, () => console.log("Servidor iniciado em http://localhost:3000"));Aqui adicionamos o helper createStringList(), que aceita um array de strings como parâmetro e cria um elemento <ul> a partir delas. Para que o valor retornado seja tratado como HTML, usamos a função hbs.SafeString().
Também vamos alterar o arquivo de visualização home.hbs:
<!DOCTYPE html>
<html>
  <head>
    <title>Página Principal</title>
    <meta charset="utf-8" />
  </head>
  <body>
    <h1>Página Principal</h1>
    <div>{{getTime}}</div>
    <div>{{createStringList fruit}}</div>
  </body>
</html>O resultado na página web será uma lista de frutas:
