EJS找不到包含文件

时间:2017-12-22 06:25:57

标签: javascript node.js express ejs

这可能听起来像this和其他几个重复,但这些堆栈中给出的解决方案没有帮助。

我正在使用EJS模板创建HTML,但在包含部分内容时我收到以下错误:

 throw new Error('Could not find include include file.');

以下是项目结构

 |
 |
 |-----index.js
 |-----view
 |       |
 |       |----pages
 |       |      |----mainTemplate.ejs
 |       |----partials
 |       |      |----bodyTemplate.ejs
 |       |

现在按照doc,include采用相对路径,因此mainTemplate.ejs中的代码包含像这样的bodyTemplate

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Sample</title>
</head>

<body>

<!-- Insert Body here -->
<div class="container">

    <div class="starter-template">
        <% include ../partials/bodyTemplate.ejs%>
    </div>

</div>

</body>
</html>

虽然bodyTemlate.ejs中的代码是

<% console.log("#########################");%>
<h1>Hi there !! </h1>

我收到找不到包含文件 关于在这里访问哪条路径,这个错误并不太具体。

我试过从路径中删除 .. 仍然没有用?我的EJS应用程序中有相同的项目结构,这个相同的代码片段工作正常吗? 这是否具体表达导致此类问题?

修改

这是index.js

var fs = require('fs'),
  ejs = require("ejs");

function ejs2html(path, information) {
  fs.readFile(path, 'utf8', function(err, data) {
    if (err) {
      console.log("ERROR: " + err);
      return false;
    }
    var ejs_string = data,
      template = ejs.compile(ejs_string),
      html = template(information);
    fs.writeFile(path + '.html', html, function(err) {
      if (err) {
        console.log(err);
        return false
      }
      return true;
    });
  });
}
// console.log("This is path --> ", __dirname + '/view/pages/bodyTemplate.ejs');
ejs2html(__dirname + '/view/pages/mainTemplate.ejs');

1 个答案:

答案 0 :(得分:5)

问题是你试图在从fs获取字符串之后编译html ejs不知道该文件位于何处以及在哪里查找相关模板。< / p>

&#13;
&#13;
var fs = require('fs'),
    ejs = require("ejs");

function ejs2html(path, information) {
    fs.readFile(path, 'utf8', function (err, data) {
        if (err) {
            console.log("ERROR: " + err);
            return false;
        }
        var ejs_string = data,
            template = ejs.compile(ejs_string, {
                filename: path
            }),
            html = template(information);
        fs.writeFile(path + '.html', html, function (err) {
            if (err) {
                console.log(err);
                return false
            }
            return true;
        });
    });
}
// console.log("This is path --> ", __dirname + '/view/pages/bodyTemplate.ejs');
ejs2html(__dirname + '/view/pages/mainTemplate.ejs');
&#13;
&#13;
&#13;

基本上我通过{filename: path}来告诉ejs文件最初所在的位置。

虽然我相信您尝试做的事ejs已经使用renderFile方法实现了。 检查这个能做你想做的替代功能。

&#13;
&#13;
var fs = require('fs'),
    ejs = require("ejs");

function ejs2html2(path, information) {
    ejs.renderFile(path, function (err, html) {
        if (err) {
            console.log("ERROR: " + err);
            return false;
        }
        fs.writeFile(path + '.html', html, function (err) {
            if (err) {
                console.log(err);
                return false
            }
            return true;
        });
    })
}
ejs2html2(__dirname + '/view/pages/mainTemplate.ejs');
&#13;
&#13;
&#13;