在node.js中渲染ejs文件

Hea*_*ota 17 ejs node.js

嘿家伙我正在玩node.js并尝试渲染模板文件.我想出了如何呈现字符串:

var http = require('http');
var ejs = require('ejs');

var server = http.createServer(function(req, res){
    res.end(ejs.render('Hello World'));
});

server.listen(3000);
Run Code Online (Sandbox Code Playgroud)

如何渲染模板文件?

ksl*_*oan 37

在ejs中有一个未记录的函数来渲染文件,你可以做...

ejs.renderFile(__dirname + '/template.ejs', function(err, data) {
    console.log(err || data)
})
Run Code Online (Sandbox Code Playgroud)

资源

  • 这个答案应该被多次推翻.比使用正确功能的其他更简单. (2认同)
  • 使用 Promise,例如 `const html = wait ejs.renderFile(templatePath, {extraData})` 可能是当今的最佳方式。 (2认同)

Ama*_*dan 23

var templateString = null;
var fs = require('fs');
var templateString = fs.readFileSync('template.ejs', 'utf-8');
Run Code Online (Sandbox Code Playgroud)

然后你做你的事情:

var server = http.createServer(function(req, res){
    res.end(ejs.render(templateString));
});
Run Code Online (Sandbox Code Playgroud)

  • 快点好起来 :) (4认同)
  • 这是不对的.ReadFile是异步函数,因此在服务器上完成请求时,templateString可以为null.你应该调用`readFileSync`或者在回调后启动服务器 (3认同)

ale*_*lex 5

您所要做的就是将文件编译为字符串(带有可选的局部变量),如下所示:

var fs = require('fs'), ejs = require('ejs'), http = require('http'), 
         server, filePath;
filePath = __dirname + '/sample.html'; // this is from your current directory
fs.readFile(filePath, 'utf-8', function(error, content) {
  if (error) { throw error); }
  // start the server once you have the content of the file
  http.createServer(function(req, res) {
    // render the file using some local params
    res.end(ejs.render(content, {
      users: [
        { name: 'tj' },
        { name: 'mape' },
        { name: 'guillermo' }
      ]
    });  
  });
});
Run Code Online (Sandbox Code Playgroud)