Node.js 如何:在没有express的情况下使用ejs

Node.js 如何:在没有express的情况下使用ejs,node.js,ejs,Node.js,Ejs,一般来说,我从node开始,尝试在没有express的情况下创建一个站点。 我仍然希望使用ejs注入我的html,这就是我的问题所在。。。 如何将ejs.render(…)附加到响应 PS:我知道使用express可能是一个更好的选择,但在桥接之前,我想知道它在底层是如何工作的 比如: var ejs = require("ejs"); function index (response, request, sequelize) { response.writeHead(200, {"C

一般来说,我从node开始,尝试在没有express的情况下创建一个站点。 我仍然希望使用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;
但这是可行的^_^

谢谢

有一个名为的项目,它为许多模板引擎提供了通用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或任何兼容引擎。

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

简单的例子:

main.ejs:

<p> <%= exampleRenderEjs  %> </p>
一些书中的例子: 模板.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);

.entry_title{font-weight:bold;}
.entry_date{字体样式:斜体;}
.entry_body{页边距底部:1em;}
{ %>
功能博客页面(条目){
常量值={entries};
consttemplate=fs.readFileSync('./template.ejs',utf8');
返回ejs.render(模板、值);
}
const server=http.createServer((req,res)=>{
const entries=getEntries();
常量输出=博客页面(条目);
res.writeHead(200,{'Content-Type':'text/html'});
res.end(输出);
log('runserver');
});
服务器监听(8000);

“在桥接之前,我想知道它在下面是如何工作的。”阅读express源代码,这有多难?不是express…常规节点你想了解express是如何实现的。在我看来,阅读express源代码中express如何调用ejs似乎是合乎逻辑的。无论如何,似乎logical ejs也不会关心模板位于另一个文件中的事实,而是将模板字符串作为render inst的参数ead@npm,在我跳入express之前,我想知道node是如何工作的。有没有一种方法可以在没有界面的情况下完成它?尽管这不是我想要的答案,因为我想针对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);