如何使用ejs而不需要express

13
我开始学习Node.js,并尝试不使用Express构建网站。但我仍然想使用EJS来注入HTML,这就是我的问题所在... 我该如何将ejs.render(...)附加到响应中?
PS:我知道使用Express可能是更好的选择,但在连接它之前,我想了解其底层工作原理。
类似于: ```javascript response.write(ejs.render(...)); response.end(); ```
var ejs = require("ejs");

function index (response, request, sequelize) {
    response.writeHead(200, {"Content-Type": "text/html"});
    test_data = "test data";
    response.end(ejs.render("./views/home.html",test_data));
}

exports.index = index;

但是那很有效 ^_^

谢谢!


在桥接之前,我想知道它的底层工作原理。阅读 Express 源代码,这有多难呢? - mpm
3
不表达...常规节点。 - Manatax
你想学习express是如何做的。对我来说,在express源代码中阅读如何调用ejs似乎是很合理的。不管怎样,似乎ejs并不关心你的模板是否在另一个文件中,而是将模板字符串作为render函数的参数。 - mpm
2
@npm,我想在学习Express之前了解Node是如何工作的。 - Manatax
3个回答

21

首先,您需要安装ejs -> $ npm install ejs --save

简单示例:

main.ejs:

<p> <%= exampleRenderEjs  %> </p>

服务器.ejs

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

var htmlContent = fs.readFileSync(__dirname + '/main.ejs', 'utf8');

var htmlRenderized = ejs.render(htmlContent, {filename: 'main.ejs', exampleRenderEjs: 'Hello World!'});

console.log(htmlRenderized);

2
有一个名为Consolidate.js的项目,它为许多模板引擎提供了通用的API。这确保它们可以互换使用。如果你想直接渲染模板,你需要兼容这个API。
Consolidate.js自述文件中的示例代码:
var cons = require('consolidate');
cons.swig('views/page.html', { user: 'tobi' }, function(err, html){
  if (err) throw err;
  console.log(html); // Or write to your `res` object here
});

这个示例是为Swig准备的,但类似的代码也适用于EJS或任何兼容的引擎。

有没有一种不需要接口的方法来实现它? - Manatax
1
尽管这不是我想要的答案,因为我想要特定于ejs的答案,但我认为这个答案更好,因为它适用于任何模板引擎。 - Manatax

-3

来自某本书的示例: template.ejs

<html>
  <head>
    <style type="text/css">
      .entry_title { font-weight: bold; }
      .entry_date { font-style: italic; }
      .entry_body { margin-bottom: 1em; }
    </style>
  </head>
  <body>
    <% entries.map(entry => { %>
      <div class="entry_title"><%= entry.title %></div>
      <div class="entry_date"><%= entry.date %></div>
      <div class="entry_body"><%= entry.body %></div>
    <% }); %>
  </body>
</html>


function blogPage(entries) {
    const values = { entries };
    const template = fs.readFileSync('./template.ejs', 'utf8');
    return ejs.render(template, values);
}


const server = http.createServer((req, res) => {
    const entries = getEntries();
    const output = blogPage(entries);
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end(output);
    console.log('run server');
});
server.listen(8000);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接