【问题标题】:How to: Use ejs without express如何:在没有 express 的情况下使用 ejs
【发布时间】:2014-05-19 01:38:42
【问题描述】:

我一般从节点开始,我正在尝试做一个没有快递的网站。 我仍然想使用 ejs 来注入我的 html,这就是我的问题所在...... 如何将 ejs.render(...) 附加到响应中?

PS:我知道使用 express 可能是一个更好的选择,但我想在桥接它之前知道它是如何工作的。

类似:

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 源码,到底有多难?
  • 不表达...常规节点
  • 您想了解 express 是如何做到的。在我看来,在 express 源代码中阅读 express 如何调用 ejs 似乎是合乎逻辑的。无论如何,ejs 似乎也不会关心您的模板是在另一个文件中,但将模板字符串作为 render 的参数。
  • @npm,在我进入 express 之前,我想知道 node 是如何工作的。

标签: node.js ejs


【解决方案1】:

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

简单示例:

main.ejs:

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

server.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 README 的示例代码:

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 或任何兼容引擎。

【讨论】:

  • 有没有没有接口的方法?
  • 尽管这不是我要寻找的答案,因为我想要特定于 ejs,但我相信这个答案更好,因为它适合任何模板引擎。
【解决方案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);

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2019-10-03
    • 2020-10-17
    • 2018-04-15
    • 2018-07-07
    • 2011-11-11
    • 2016-07-22
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多