Fat*_*oke 8 ejs node.js express
我使用Express和EJS来构建一个站点,我有一个目录结构,如:
+--www/
|
+--partials/
| |
| +--header.ejs
| +--(a bunch of ejs files)
|
+--guide
| |
| +--index.html
| +--(other files)
|
+--index.html
Run Code Online (Sandbox Code Playgroud)
在index.html
我的示例中显示的两个文件中<% include ... %>
,即使引用相同的包含文件,命令也会不同.
此外,如果我说include header.ejs
,然后header.ejs
有另一个部分包含,整个系统崩溃,因为他们都在不同位置寻找文件.
为了简化管理,我试图找到一个字符串,以便能够引用相同的包含文件,而不管文件可能位于哪个子目录中.
理想情况下,<% include /partials/header.ejs %>
完美的东西.但这不起作用.
有没有人有任何可以在这里得到预期结果的技巧或建议?
看起来 EJS 不支持此功能,但是我找到了解决此问题的方法。在上面的设置中,痛点是对于所有部分文件,您需要提及相对路径,并且如果您重构代码会变得更加痛苦。因此,宁可在每个包含时提及相对路径,我都会声明一个变量rootPath
一次,然后在那里给出到达家的路径。这样在每次包含时,我都可以简单地提及相对路径,就像从 root 开始的路径一样。
例如,guide/index.ejs
我在 ejs 文件的顶部提到了以下内容
<% var rootPath = '../'; %>
和 ejs 文件中的代码如下所示
<%- include(rootPath + 'partials/header'); %>
你的 HTML 代码
<%- include(rootPath + 'partials/footer'); %>
因此,如果我将 index.ejs 重构到其他文件夹,我需要做的就是更改 rootPath
(其他解决方案看起来有点复杂,所以我决定也发送我的解决方案)。我在 Heroku 上测试过,效果很好。
app-locals.js
并在其中写入:module.exports = {
layouts: process.cwd() + '/views/layouts/',
partials: process.cwd() + '/views/partials/',
}
Run Code Online (Sandbox Code Playgroud)
app.js
:// const express = require('express')
// const appLocals = require('./app-locals.js')
// const app = express()
app.locals = appLocals
Run Code Online (Sandbox Code Playgroud)
<%- include(partials + 'header.ejs') %>
Run Code Online (Sandbox Code Playgroud)
或者你可以这样做:
// app-locals.js
module.exports = {
// Remove the last /
layouts: process.cwd() + '/views/layouts',
partials: process.cwd() + '/views/partials',
}
// app.js
// Add / after the path
<%- include(`${partials}/header.ejs`) %>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2792 次 |
最近记录: |