Javascript EJS噩梦--不能包含外部视图

Javascript EJS噩梦--不能包含外部视图,javascript,node.js,ejs,Javascript,Node.js,Ejs,在EJS中包含外部文件似乎从来没有一种简单的方法 我的项目结构是这样的。很简单,很痛: /lib/ejs-template.ejs /views/home.ejs /views/header.ejs 在home.ejs中,我必须包含header.ejs。我很幸运地遵循了他们的文档:并以这种方式包含该文件,因为“包含与包含调用的模板相关” 然而我却犯了这个错误 Error: ejs:38 36| <body> 37| >> 38| <%- inc

在EJS中包含外部文件似乎从来没有一种简单的方法

我的项目结构是这样的。很简单,很痛:

/lib/ejs-template.ejs

/views/home.ejs
/views/header.ejs
home.ejs
中,我必须包含
header.ejs
。我很幸运地遵循了他们的文档:并以这种方式包含该文件,因为“包含与包含调用的模板相关”

然而我却犯了这个错误

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: ''
}
错误:ejs:38
36| 
37|
>> 38| 
39|
40| 
41 |一些东西
找不到包含文件“头”
在getIncludePath([redact]\server\node\u modules\ejs\lib\ejs.js:183:13)
在includeFile([redact]\server\node\u modules\ejs\lib\ejs.js:309:19)
在include([redact]\server\node\u modules\ejs\lib\ejs.js:690:16)
评估时(编译时评估([redact]\server\node\u modules\ejs\lib\ejs.js:662:12),:12:17)
匿名([redacted]\server\node\u modules\ejs\lib\ejs.js:692:17)
在module.exports([redact]\server\util\ejs template.js:13:7)
在[redacted]\server\route\site.js:13:18
在Layer.handle[作为handle\u请求]([redact]\server\node\u modules\express\lib\router\Layer.js:95:5)
下一步([redacted]\server\node\u modules\express\lib\router\route.js:137:13)
在module.exports([redact]\server\middleware\isLoggedIn.js:8:9){
路径:“”
}
我已在编译选项中设置视图路径。我试过使用/不使用路径。我还尝试将
root
设置为相同的精确视图路径


我错过了什么?文档很松散,没有提供任何关于这方面的线索。

据我所知,您在主视图文件中遇到了包含头部分的问题。我使用了下面的代码

<body>
    <%- include("header"}) %>
    <h1><%= title %></h1>
    <p>Welcome to <%= title %></p>
    <button>Button</button>
</body>

欢迎来到

按钮

上面的脚本是您的
home.ejs
,您可以创建
header.ejs
。您可以像上面那样包含似乎这是一个路径问题。我必须这样设置:

module.exports = (target, vars = {})=>{
    return Ejs.compile( Fs.readFileSync(`${__dirname}/../views/${target}.ejs`, {encoding: 'utf-8'}), {
        views: [ Path.resolve('../views') ],
    })(vars)
}
views: [ Path.resolve(__dirname, '../views') ],
荣誉

views: [ Path.resolve(__dirname, '../views') ],