Newer
Older
express-blog / src / utils / MarkdownRoutes.js
// src/utils/MarkdownRoutes.js
const BaseRoute = require("./BaseRoute");
const fs = require("fs/promises");
const path = require("path");
const matter = require("gray-matter");
const { marked } = require("marked");
const getBaseContext = require("./baseContext");

class MarkdownRoutes extends BaseRoute {
  constructor() {
    super();
  }

  register(routePath, markdownFile = "page", handlebarsFile = "page") {
    this.router.get(routePath, async (req, res, next) => {
      try {
        const filePath = path.join(
          __dirname,
          `../../content/pages/${markdownFile}.md`
        );
        const fileContent = await fs.readFile(filePath, "utf8");
        const { data: frontmatter, content } = matter(fileContent);
        const htmlContent = marked(content);
        const context = {
          title: frontmatter.title,
          content: htmlContent,
        }
        res.renderWithBaseContext(`pages/${handlebarsFile}`, context);
      } catch (err) {
        err.statusCode = 500;
        next(err);
      }
    });
  }
}

module.exports = MarkdownRoutes;