node.js - EJS 包含相对于项目根目录的文件

标签 node.js express ejs

我正在使用 Express 和 EJS 来构建站点,并且 我的目录结构类似于:

+--www/
  |
  +--partials/
  | |
  | +--header.ejs
  | +--(a bunch of ejs files)
  |
  +--guide
  | |
  | +--index.html
  | +--(other files)
  |
  +--index.html

index.html 中我的示例中显示的文件 <% include ... %>命令会有所不同,即使引用相同的包含文件也是如此。

另外,如果我要说包括 header.ejs然后 header.ejs包含另一个部分,整个系统崩溃,因为他们都在不同的位置寻找文件。

为了简化管理,我试图找到一个字符串来引用相同的包含文件,而不管这些文件可能位于哪个子目录中。

理想情况下类似 <% include /partials/header.ejs %>将会是完美的。但这不起作用。

有没有人有任何技巧或建议可以在这里给出预期的结果?

最佳答案

看起来这不受 EJS 支持,但我找到了解决此问题的方法。 在上面的设置中,痛点在于所有部分文件,您需要提及相对路径,如果重构代码会变得更加痛苦。所以宁愿在每个包含中提到相对路径我声明一个变量rootPath一次,我在那里给出了回家的路。这样在每次包含时我都可以简单地提及相对路径,就像从根目录开始的路径一样。

例如 guide/index.ejs我在 ejs 文件的顶部提到了以下内容

<% var rootPath = '../'; %>

and 和 ejs 文件中的代码如下所示

<%- include(rootPath + 'partials/header'); %>

您的 HTML 代码

<%- include(rootPath + 'partials/footer'); %>

因此,如果我将 index.ejs 重构到其他文件夹,我需要做的就是更改 rootPath 的值。

关于node.js - EJS 包含相对于项目根目录的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38487980/

相关文章:

express - Vue历史模式和 express 服务器出现404错误

html - 表达-ejs-布局 : how to set default view if no view was passed

javascript - 如何使用 Cloud Functions 的自定义域作为 POST 请求

node.js - 在 Node Express 的 app.all() 函数中使用一组路由进行操作

javascript - Node Express 使用 JSON 作为 API 响应发送图像文件

javascript - 在 Node JS 中使用数据渲染 View [无框架]

javascript - 在html文件中显示存储在MongoDb中的图像

javascript - 使用nodejs在mysql中插入多个值会导致解析错误

node.js - 如何将nodejs和express设置为 digital ocean 上的docker容器?

node.js - 用于生产的 Ember 构建花费了超过预期的时间