EJS 噩梦——不能包含外部视图
EJS nightmare -- cannot include external view
似乎从来没有一种简单的方法可以在 EJS 中包含外部文件。
我的项目结构如下。如此简单却令人痛心:
/lib/ejs-template.ejs
/views/home.ejs
/views/header.ejs
里面home.ejs
我必须包括header.ejs
。我很幸运地遵循了他们的文档:https://ejs.co/#docs 并以这种方式包含文件,因为“包含与包含调用的模板相关”,
<%- include("header") %>
在ejs-template.ejs
里面我正在这样编译模板:
module.exports = (target, vars = {})=>{
return Ejs.compile( Fs.readFileSync(`${__dirname}/../views/${target}.ejs`, {encoding: 'utf-8'}), {
views: [ Path.resolve('../views') ],
})(vars)
}
但是我得到这个错误!
Error: ejs:38
36| <body>
37|
>> 38| <%- include("header") %>
39|
40| <main class="container">
41| <h4>Some stuff</h4>
Could not find the include file "header"
at getIncludePath ([redacted]\server\node_modules\ejs\lib\ejs.js:183:13)
at includeFile ([redacted]\server\node_modules\ejs\lib\ejs.js:309:19)
at include ([redacted]\server\node_modules\ejs\lib\ejs.js:690:16)
at eval (eval at compile ([redacted]\server\node_modules\ejs\lib\ejs.js:662:12), <anonymous>:12:17)
at anonymous ([redacted]\server\node_modules\ejs\lib\ejs.js:692:17)
at module.exports ([redacted]\server\util\ejs-template.js:13:7)
at [redacted]\server\route\site.js:13:18
at Layer.handle [as handle_request] ([redacted]\server\node_modules\express\lib\router\layer.js:95:5)
at next ([redacted]\server\node_modules\express\lib\router\route.js:137:13)
at module.exports ([redacted]\server\middleware\isLoggedIn.js:8:9) {
path: ''
}
我已经在编译选项中设置视图路径。我试过 with/without 路径。我也尝试过将 root
设置为完全相同的视图路径。
我错过了什么?文档很松散,没有提供任何线索。
据我了解,您在主视图文件中包含 header 部分时遇到了问题。我使用了下面的代码。
<body>
<%- include("header"}) %>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<button>Button</button>
</body>
上面的脚本是你home.ejs
,你可以创建header.ejs
。你可以像上面那样包含
看来是路径问题。我必须这样设置它:
views: [ Path.resolve(__dirname, '../views') ],
感谢https://github.com/mde/ejs/issues/594#issuecomment-812518617
似乎从来没有一种简单的方法可以在 EJS 中包含外部文件。
我的项目结构如下。如此简单却令人痛心:
/lib/ejs-template.ejs
/views/home.ejs
/views/header.ejs
里面home.ejs
我必须包括header.ejs
。我很幸运地遵循了他们的文档:https://ejs.co/#docs 并以这种方式包含文件,因为“包含与包含调用的模板相关”,
<%- include("header") %>
在ejs-template.ejs
里面我正在这样编译模板:
module.exports = (target, vars = {})=>{
return Ejs.compile( Fs.readFileSync(`${__dirname}/../views/${target}.ejs`, {encoding: 'utf-8'}), {
views: [ Path.resolve('../views') ],
})(vars)
}
但是我得到这个错误!
Error: ejs:38
36| <body>
37|
>> 38| <%- include("header") %>
39|
40| <main class="container">
41| <h4>Some stuff</h4>
Could not find the include file "header"
at getIncludePath ([redacted]\server\node_modules\ejs\lib\ejs.js:183:13)
at includeFile ([redacted]\server\node_modules\ejs\lib\ejs.js:309:19)
at include ([redacted]\server\node_modules\ejs\lib\ejs.js:690:16)
at eval (eval at compile ([redacted]\server\node_modules\ejs\lib\ejs.js:662:12), <anonymous>:12:17)
at anonymous ([redacted]\server\node_modules\ejs\lib\ejs.js:692:17)
at module.exports ([redacted]\server\util\ejs-template.js:13:7)
at [redacted]\server\route\site.js:13:18
at Layer.handle [as handle_request] ([redacted]\server\node_modules\express\lib\router\layer.js:95:5)
at next ([redacted]\server\node_modules\express\lib\router\route.js:137:13)
at module.exports ([redacted]\server\middleware\isLoggedIn.js:8:9) {
path: ''
}
我已经在编译选项中设置视图路径。我试过 with/without 路径。我也尝试过将 root
设置为完全相同的视图路径。
我错过了什么?文档很松散,没有提供任何线索。
据我了解,您在主视图文件中包含 header 部分时遇到了问题。我使用了下面的代码。
<body>
<%- include("header"}) %>
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
<button>Button</button>
</body>
上面的脚本是你home.ejs
,你可以创建header.ejs
。你可以像上面那样包含
看来是路径问题。我必须这样设置它:
views: [ Path.resolve(__dirname, '../views') ],
感谢https://github.com/mde/ejs/issues/594#issuecomment-812518617