【问题标题】:EJS nightmare -- cannot include external viewEJS 噩梦——不能包含外部视图
【发布时间】:2021-06-29 07:35:29
【问题描述】:

似乎从来没有一种简单的方法可以在 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: ''
}

我已经在编译选项中设置了视图路径。我试过有/没有路径。我也尝试过将root 设置为相同的视图路径。

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

【问题讨论】:

    标签: javascript node.js ejs


    【解决方案1】:

    似乎是路径问题。我必须这样设置:

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

    https://github.com/mde/ejs/issues/594#issuecomment-812518617致敬

    【讨论】:

      【解决方案2】:

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

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

      上面的脚本是你home.ejs,你可以创建header.ejs。你可以像上面一样包含

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-11
        • 1970-01-01
        • 2010-12-21
        • 2020-03-14
        • 2010-11-13
        • 2010-12-22
        相关资源
        最近更新 更多