通过 Express/EJS/FS 生成 HTML 文件并通过 Nginx 而不是 express 提供它们

Generate HTML files through Express/EJS/FS and serve them through Nginx instead of express

假设我们有一个 JSON:

[
  {
    "id": 1,
    "title": "Title 1",
    "description": "Description 1"
  },
  {
    "id": 2,
    "title": "Title 2",
    "description": "Description 2"
  },
  {
    "id": 3,
    "title": "Title 3",
    "description": "Description 3"
  }
]

还有一个名为 index.ejs

的 EJS 文件
<!DOCTYPE html>
<html lang="en">
  <body>
    <% data.forEach(item => { %>
    <h1><%- item.title %></h1>
    <p><%- item.description %></p>
    <% }) %>
  </body>
</html>

我可以简单地使用此 javascript 代码通过 express 呈现数据:

const express = require("express");
const app = express();

const data = require("./data.json");

app.set("view engine", "ejs");

app.get("/", (req, res) => {
  res.render("index", { data });
});

app.listen(4000);

但是,如果我想创建 3 个 HTML 页面并通过 Nginx 为它们提供服务怎么办? 我可以使用 fs 创建 html 文件。但问题是,我如何使用 EJS 创建 3 个生成的页面,但通过 Nginx 而不是 node.js 的 app.get()?

呈现页面

如果数据是静态的(事先已知并且不会更改),您可以通过编写一个使用 EJS 生成的单独的 nodejs 脚本来生成 HTML 页面一次作为某些构建过程的一部分HTML 文件,然后将生成的 HTML 文件保存到 nginx 特定目录,让 nginx 从那里提供静态网页。

我为 github.io 网站做了类似的事情,我使用 nodejs 脚本和模板引擎预先生成静态 HTML 页面,然后通过 [=16] 提供=].这让我可以使用模板的特性(通用页眉、通用页脚、通用样式等)来生成一组静态 HTML 页面。当我想更新网页时,我可以只更新模板并重新生成,而不是手动编辑每个 HTML 页面。

如果数据是动态的,那么 nginx 不知道如何生成它们,因为它不直接支持这些类型的模板引擎(它们是为 Javascript 引擎设计的)所以你会坚持服务来自 nodejs 的 EJS 模板。