我从一般的节点开始,我试图在没有快递的情况下建立一个网站。 我会用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;
但这有效^ _ ^
谢谢!
答案 0 :(得分:10)
首先,您需要安装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);
答案 1 :(得分: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或任何兼容的引擎。
答案 2 :(得分:-2)
某本书的示例: 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);