这可能听起来像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');
答案 0 :(得分:5)
问题是你试图在从fs
获取字符串之后编译html ejs
不知道该文件位于何处以及在哪里查找相关模板。< / p>
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;
基本上我通过{filename: path}
来告诉ejs
文件最初所在的位置。
虽然我相信您尝试做的事ejs
已经使用renderFile
方法实现了。
检查这个能做你想做的替代功能。
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;