21

私は Node.js を使用しており、EJS テンプレート ファイルをレンダリングしようとしています。文字列をレンダリングする方法を見つけました:

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

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

    server.listen(3000);

EJS テンプレート ファイルをレンダリングするにはどうすればよいですか?

4

7 に答える 7

52

EJS にはファイルをレンダリングする関数があり、次のように実行できます。

    ejs.renderFile(__dirname + '/template.ejs', function(err, data) {
        console.log(err || data);
    });

出典: EJS の公式ドキュメント

于 2016-02-10T01:56:12.470 に答える
25
var templateString = null;
var fs = require('fs');
var templateString = fs.readFileSync('template.ejs', 'utf-8');

そして、あなたはあなたのことをします:

var server = http.createServer(function(req, res){
    res.end(ejs.render(templateString));
});
于 2011-12-28T20:09:25.783 に答える
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' }
      ]
    });  
  });
});
于 2011-12-28T20:14:47.093 に答える
3

このパターンをもう少し引き締めた同期バージョンがあります。

var server = http.createServer(function(req, res) {
    var filePath = __dirname + '/sample.html';
    var template = fs.readFileSync(filePath, 'utf8');
    res.end(ejs.render(template,{}));
});

readFileSync ()の使用に注意してください。エンコーディング (ここでは utf8) を指定すると、関数はテンプレートを含む文字列を返します。

于 2013-01-03T19:48:40.460 に答える
3

@ksloanの答えは受け入れられるべきです。これはまさにこの目的のために ejs 関数を使用します。

Bluebird での使用方法の例を次に示します。

var Promise = require('bluebird');
var path = require('path');
var ejs = Promise.promisifyAll(require('ejs'));

ejs.renderFileAsync(path.join(__dirname, 'template.ejs'), {context: 'my context'})
  .then(function (tpl) {
    console.log(tpl);
  })
  .catch(function (error) {
    console.log(error);
  });

完全を期すために、現在受け入れられている回答の約束されたバージョンを次に示します。

var ejs = require('ejs');
var Promise = require('bluebird');
var fs = Promise.promisifyAll(require('fs'));
var path = require('path');

fs.readFileAsync(path.join(__dirname, 'template.ejs'), 'utf-8')
  .then(function (tpl) {
    console.log(ejs.render(tpl, {context: 'my context'}));
  })
  .catch(function (error) {
    console.log(error);
  });
于 2016-08-08T21:48:44.790 に答える