ejs 使用 Node.js 和 socket.io 渲染

ejs render with Node.js and socket.io

我开始使用 Node.js 并且我选择了我的模板引擎,它是 ejs。我的应用程序使用 socket.io 并根据特定请求尝试呈现 ejs 文件并发回客户端。当它是一个没有包含的单个 ejs 文件时,ejs 文件呈现得很漂亮,但是当我尝试包含另一个 ejs 文件时,它崩溃并显示以下消息:"Error: filename option is required for includes"。 请注意,

  app.get('/', function(req, res){
    res.render(__dirname+'/views/main/index',{});
   });

工作得很好,即使 index.ejs 包含 <% include something %>。 我的其他代码部分,如果 index.ejs 包含(不包含它有效)则不起作用:

io.on('connection', function(socket){
    fs.readFile('/views/main/index', 'utf8', function (err, template) {
       var content = ejs.render(template,{
                            data:data
                            },function(err,result){
                            console.log(result);
    });
});

这里有一个例子 ejs:

<% include list_header %> 
<span>random content</span>

当你想使用 includes with ejs.render() 你也 need to pass the filename option:

var content = ejs.render(template, {
  data     : data,
  filename : '/views/main/index'
});

filename 需要是您的主模板的完整路径;在您的代码中您使用的是 /views/main/index 所以我使用了它)

如果您经常需要呈现相同的模板,我建议您使用 ejs.compile()