【问题标题】:ejs include function can not find the template with html extensionejs包含功能找不到带有html扩展名的模板
【发布时间】:2013-04-22 02:54:27
【问题描述】:

我的 ejs 引擎设置是 app.js 如下:

// this parse html file as ejs file
    app.engine('.html', require('ejs').__express);
    app.set('view engine', 'html');
    app.set('views', __dirname + '/view');

我的目录是这样的:

view (folder)
  home.html
  head.html
app.js

Home.html 是这样的:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>home</title>
<% include head %>
</head>

<body>

</body>
</html>

而head.html是这样的:

<link rel="stylesheet" type="text/css" href="css/main.css">
<script type="text/javascript" src="js/jquery-1.5.js"></script>

问题是如果扩展名是 html,文件 head.html 将不会被解析。错误说它需要 ejs 文件。那么include函数有问题吗?

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    用 ejs 修改 html 文件

       -view
       --home.ejs
       --head.ejs
       -app.js
    

    设置应用视图引擎喜欢

      app.set('view engine', 'ejs');
    

    为主文件制作 index.ejs 并在 index.ejs 中包含 home.ejs 和 head.ejs

    <%- include('head')%>;
    <%- include('home')%>;
    

    并像 app.js 一样渲染它

    app.get('/', (req, res) => { 
        res.render('index');
    });
    

    cmiiw..

    【讨论】:

      【解决方案2】:

      arrr ;)

      1. 你没有提到什么应用 - 所以我假设 Express >=3
      2. 解决方案:忘记点和__express in

      app.engine('.html', require('ejs').__express);

      应该是:

      app.engine('html', require('ejs').renderFile);
      

      【讨论】:

        【解决方案3】:

        我也遇到了这个问题,修改了我应用的这个文件:

        myapp/node_modules/ejs/lib/ejs.js
        

        函数是:

        function resolveInclude(name, filename) {
          var path = join(dirname(filename), name);
          var ext = extname(name);
          if (!ext) path += '.ejs';
          return path;
        }
        

        您可以更改默认扩展名,或者在我的情况下,我将功能更改为更直接:

        function resolveInclude(name, filename) {
          return join(dirname(filename), name) + '.html';
        }
        

        他们可以随意修改函数。

        希望对你有帮助。

        【讨论】:

          【解决方案4】:

          正如 Elie Gnrd 建议的那样,您可以通过更改 Express 的 view engine 配置直接使用 .ejs 文件。

          如果这不是一个选项,并且您希望/需要继续使用 .html 作为模板的扩展名,则必须在包含中明确:

          <% include head.html %>
          

          【讨论】:

            【解决方案5】:

            您可以直接使用 .ejs 文件,方法是使用 app.set('view engine', 'ejs'); 并将 index.html 重命名为 index.ejs。

            这是一个例子: http://robdodson.me/blog/2012/05/31/how-to-use-ejs-in-express/

            【讨论】:

            • 其实我想用ejs引擎但是文件扩展名是html
            • app.engine('html', require('ejs').renderFile);
            猜你喜欢
            • 2021-09-20
            • 2016-12-28
            • 2010-11-27
            • 2015-05-25
            • 2015-08-22
            • 1970-01-01
            • 2018-06-04
            相关资源
            最近更新 更多