Newer
Older
express-blog / src / middleware / hbs.js
// src/middleware/hbs.js
const path = require("path");
const exphbs = require("express-handlebars");
const { registerHelpers } = require("../utils/hbsHelpers");

const hbsMiddleware = (req, res, next) => {
  if (!req.app.get("view engine")) {
    const hbs = exphbs.create({
      layoutsDir: path.join(__dirname, "../views/layouts"),
      partialsDir: path.join(__dirname, "../views/partials"),
      defaultLayout: "main",
      helpers: {
        section(name, options) {
          this._sections ??= {};
          this._sections[name] ??= "";
          this._sections[name] += options.fn(this);
          req.log.debug(name, this._sections);
          return null;
        },
      },
      extname: ".handlebars",
      runtimeOptions: {
        allowProtoPropertiesByDefault: true,
        allowProtoMethodsByDefault: true,
      },
    });

    registerHelpers(hbs);
    req.app.engine("handlebars", hbs.engine);
    req.app.set("view engine", "handlebars");
    req.app.set("views", path.join(__dirname, "../views"));
  }

  next();
};

module.exports = hbsMiddleware;