webentwicklung-frage-antwort-db.com.de

Was macht "res.render" und wie sieht die HTML-Datei aus?

Was macht res.render und wie sieht die HTML-Datei aus? 

Mein Endziel ist, beliebige durch Kommas getrennte Werte aus einer Textdatei in eine HTML-Datei zu laden (zum Beispiel). Ich konnte nur folgern, dass eine Ansicht die HTML-Datei war, und Callback gibt diese HTML-Datei zurück.

Hier ist die Dokumentation: http://expressjs.com/api.html#res.render .

Angenommen, der Kontext aus einem Beispielcode, den ich gefunden habe, besteht in der Verwendung von ejs (eingebettetes Javascript) mit <% und %>

Aber wenn ich hinzufügen darf, bin ich einfach inkompetent oder ist die Dokumentation wirklich vage und geht davon aus, dass der Leser alles weiß? Wie hätte ich das selbst herausfinden können? Gibt es offizielle Unterlagen, damit ich die Verwendung, Vorteile und Fallstricke vollständig verstehen kann?


Edit 1 

Ich möchte nur hinzufügen, dass ich viel Zeit habe, node.js zu lernen. Ist es mir oder ist die allgemeine Dokumentation wirklich vage? Abgesehen von miesen Erklärungen wie oben gibt es keine Typspezifikationen für Parameter oder Rückgabewerte.


Edit 2

Lassen Sie mich einige spezifische Fragen über dem Code stellen.

Die eigentliche orders.ejs-Datei befindet sich in views/orders.ejs. Wie bezieht sich dieser Code darauf?

HTML-Auszug:

<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>
     <% } %>

Und die Js. Bitte sehen/Bestellungen:

  // 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);
        });
      }
    });
  }
};
23
user2316667

Was macht res.render und wie sieht die HTML-Datei aus?

res.render() function kompiliert Ihre Vorlage (bitte verwenden Sie keine ejs), fügt dort Einheimische ein und erstellt aus diesen beiden Dingen eine HTML-Ausgabe.


Beantwortung Edit 2 Part.

// 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});

Der Vorlagenpfad lautet also views/ (erster Teil) + orders (zweiter Teil) + .ejs (dritter Teil) === views/orders.ejs


Jedenfalls ist die Dokumentation von express.js gut für das, was sie tut. Es handelt sich um eine API-Referenz, nicht um ein Buch "how to use node.js".

22
alex

Rendert eine Ansicht und sendet die gerenderte HTML-Zeichenfolge an den Client.

res.render('index');

Oder

res.render('index', function(err, html) {
  if(err) {...}
  res.send(html);
});

DOCS HIER: https://expressjs.com/de/api.html#res.render

0
sultan aslam