我正在创建此模板:
<% include head %>
<Placemark>
<name><%=name%></name>
<description><%=description%></description>
<Point>
<coordinates><%=coordinates%></coordinates>
</Point>
</Placemark>
<% include foot %>
但我总是得到这个错误:
if (!filename) throw new Error('filename option is required for includ
^
目录:
justas@justas-Studio-1555:~/node-socket.io/socket.io/examples/kml$ ls -1
app.js
foot.ejs
head.ejs
placemark.ejs
有人可以提供帮助,我根据工具箱一切都应该工作
app.js:
var http = require('http');
var ejs = require('ejs');
var fs = require('fs')
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/xml'});
fs.readFile('placemark.ejs', 'utf8', function (err, template) {
var content = ejs.render(template,{
name:"test name",
description:"this is the description",
coordinates:"-122.0822035425683,37.42228990140251,0"
});
res.write(content);
res.end()
});
}).listen(8000);
console.log('Server listening at at xxxxxxxx');
使用ejs我渲染模板,它是从其他模板构建的。使用ejs-locals它表示它没有方法渲染。有没有办法只用'ejs'来做到这一点?
答案 0 :(得分:10)
这是一个有效的例子:
您似乎需要传递模板的文件名,以便能够使用包含 - 请参阅example here
var http = require('http');
var ejs = require('ejs');
var fs = require('fs');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/xml'});
fs.readFile('placemark.ejs', 'utf8', function (err, template) {
var content = ejs.render(template,{
name:"test name",
description:"this is the description",
coordinates:"-122.0822035425683,37.42228990140251,0",
filename: __dirname + '/placemark.ejs'
});
res.write(content);
res.end()
});
}).listen(8000);
console.log('Server listening at at xxxxxxxx');
答案 1 :(得分:3)
我最近也遇到过这个错误。我看到了alexjamesbrown的回答,但我不喜欢这个解决方案。我宁愿不为每个渲染包含filename变量;代码可能会变得混乱!我希望将文件包含在各个视图中。
所以我挖掘了ejs lib文件并删除了对filename变量的要求。
您将在第157行的\ ejs \ lib \ ejs.js中找到以下内容
if (!filename) throw new Error('filename option is required for includes');
只需注释掉该行,并在.ejs文件中使用<% include views\include.ejs %>
即可包含您的个人观点。
以上内容适用于ejs版本0.8.4
答案 2 :(得分:0)
刚刚讨论了这个问题,以下是如何定义模板文件夹并在主ejs文件中包含这些模板:
var renderedHtml = ejs.render(content,
{
data: data,
filename: __dirname + '/app/templates/*'
}
);