“res.render”是做什么的,html文件是什么样的?

res.render做什么,html文件是什么样的?

我的最终目标是从文本文件中加载任意的逗号分隔值(例如)。 我只能推断出一个视图是HTML文件,callback给了这个HTML文件。

这里是文档: http : //expressjs.com/api.html#res.render 。

现在,从我发现的一些示例代码的上下文中,有一些关于使用ejs (embedded式JavaScript)与<%%>

但是,如果我可以补充说,我只是无能,或者是文件确实是模糊的,并假设读者知道一切? 我怎么能自己搞清楚呢? 有没有官方文件,我可以充分了解使用情况,优点和陷阱?


编辑1

我只想补充一点,我有一个时间学习node.js 是我还是一般文件真的模糊? 除了上面的糟糕的解释之外,没有参数或返回值的types规范。


编辑2

让我来问你一些关于代码的更具体的问题。

实际的orders.ejs文件在views/orders.ejs 。 这个代码如何引用它?

HTML摘录:

 <tbody> <% for(var i=0; i<orders.length; i++) {%> <tr> <td><%= orders[i].id %></td> <td><%= orders[i].amount %></td> <td><%= orders[i].time %></td> </tr> <% } %> 

还有js。 请看/订单:

  // Define routes for simple SSJS web app. // Writes Coinbase orders to database. var async = require('async') , express = require('express') , fs = require('fs') , http = require('http') , https = require('https') , db = require('./models'); var app = express(); app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.set('port', process.env.PORT || 8080); // Render homepage (note trailing slash): example.com/ app.get('/', function(request, response) { var data = fs.readFileSync('index.html').toString(); response.send(data); }); // Render example.com/orders app.get('/orders', function(request, response) { global.db.Order.findAll().success(function(orders) { var orders_json = []; orders.forEach(function(order) { orders_json.push({id: order.coinbase_id, amount: order.amount, time: order.time}); }); // Uses views/orders.ejs response.render("orders", {orders: orders_json}); }).error(function(err) { console.log(err); response.send("error retrieving orders"); }); }); // Hit this URL while on example.com/orders to refresh app.get('/refresh_orders', function(request, response) { https.get("https://coinbase.com/api/v1/orders?api_key=" + process.env.COINBASE_API_KEY, function(res) { var body = ''; res.on('data', function(chunk) {body += chunk;}); res.on('end', function() { try { var orders_json = JSON.parse(body); if (orders_json.error) { response.send(orders_json.error); return; } // add each order asynchronously async.forEach(orders_json.orders, addOrder, function(err) { if (err) { console.log(err); response.send("error adding orders"); } else { // orders added successfully response.redirect("/orders"); } }); } catch (error) { console.log(error); response.send("error parsing json"); } }); res.on('error', function(e) { console.log(e); response.send("error syncing orders"); }); }); }); // sync the database and start the server db.sequelize.sync().complete(function(err) { if (err) { throw err; } else { http.createServer(app).listen(app.get('port'), function() { console.log("Listening on " + app.get('port')); }); } }); // add order to the database if it doesn't already exist var addOrder = function(order_obj, callback) { var order = order_obj.order; // order json from coinbase if (order.status != "completed") { // only add completed orders callback(); } else { var Order = global.db.Order; // find if order has already been added to our database Order.find({where: {coinbase_id: order.id}}).success(function(order_instance) { if (order_instance) { // order already exists, do nothing callback(); } else { // build instance and save var new_order_instance = Order.build({ coinbase_id: order.id, amount: order.total_btc.cents / 100000000, // convert satoshis to BTC time: order.created_at }); new_order_instance.save().success(function() { callback(); }).error(function(err) { callback(err); }); } }); } }; 

res.render做什么,html文件是什么样的?

res.render()函数编译你的模板 (请不要使用ejs),在那里插入locals,然后用这两个东西创buildhtml输出。


回答编辑2部分。

 // here you set that all templates are located in `/views` directory app.set('views', __dirname + '/views'); // here you set that you're using `ejs` template engine, and the // default extension is `ejs` app.set('view engine', 'ejs'); // here you render `orders` template response.render("orders", {orders: orders_json}); 

所以,模板path是views/ (第一部分)+ orders (第二部分)+ .ejs (第三部分)=== views/orders.ejs


无论如何,express.js文档对于它的function是很好的。 这是API参考,不是“如何使用node.js”的书。