node.js ejs包含错误

node.js ejs包含错误,node.js,ejs,Node.js,Ejs,我正在创建此模板: <% include head %> <Placemark> <name><%=name%></name> <description><%=description%></description> <Point> <coordinates><%=coordinates%></coordinates>

我正在创建此模板:

<% include head %>
<Placemark>
    <name><%=name%></name>
    <description><%=description%></description>
    <Point>
        <coordinates><%=coordinates%></coordinates>
        </Point>
</Placemark>
<% include foot %>
目录:

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 I渲染模板,它从其他模板构造。使用ejs局部变量,它表示它没有render方法。只有“ejs”才能做到这一点吗?

以下是一个工作示例:

似乎您需要传入模板的文件名,以便能够使用include-请参阅


我最近也遇到了这个错误。我看到了亚历克斯詹姆斯布朗的答案,但我不喜欢这个解决方案。我不希望每次渲染都包含filename变量;代码可能会变得混乱!我更愿意将文件包含在各个视图中

因此,我深入研究了ejs lib文件,并删除了对filename变量的要求

您将在第157行的\ejs\lib\ejs.js中找到以下内容

if (!filename) throw new Error('filename option is required for includes');
只需注释掉该行,并在.ejs文件中使用
,即可包含您的各个视图


以上内容适用于ejs版本0.8.4

刚才碰到了这个问题,下面是如何定义模板文件夹并将这些模板包含在主ejs文件中:

var renderedHtml = ejs.render(content, 
                            {
                                data: data,
                                filename: __dirname + '/app/templates/*'
                            }
                        );

它无法识别“部分”引用错误:ejs:1>>1 | 2 | 3 | 4 |部分未定义“您是否在应用程序中使用require('ejs')?最新ejs和express 3不支持部分。你需要ejs局部变量来实现这一点。使用ejs局部变量表示它没有呈现方法。有没有办法只用“ejs”就可以做到这一点?谢谢你提供的功能,例如,它完成了任务:)你使用的是什么版本的ejs和express?这看起来是正确的,这就是我使用的/家/贾斯塔斯酒店├── ejs@0.8.3 ├─┬ express@3.0.0wow,你太棒了,这太棒了。我刚刚在github上添加了一个bug。干杯@JasonS-只是为了更新一下,这已经不在第157行了。在ejs\lib\ejs.js文件中搜索此行。
if (!filename) throw new Error('filename option is required for includes');
var renderedHtml = ejs.render(content, 
                            {
                                data: data,
                                filename: __dirname + '/app/templates/*'
                            }
                        );