gpt4 book ai didi

javascript - EJS 找不到包含包含文件

转载 作者:行者123 更新时间:2023-11-30 07:53:08 24 4
gpt4 key购买 nike

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

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

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

下面是项目结构

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

现在根据文档,包含采用相对路径,因此我的 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');

最佳答案

问题是您在从 fs 将它作为字符串获取后尝试编译 html,这样 ejs 不知道该文件位于何处以及该文件位于何处寻找相关模板。

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');

基本上,我传递 {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');

关于javascript - EJS 找不到包含包含文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47936799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com