Pertanyaan Apa perbedaan antara "app.render" dan "res.render" di express.js?


Dokumen untuk app.render:

Merender tampilan dengan panggilan balik merespons dengan string yang ditampilkan. Ini adalah varian tingkat aplikasi dari res.render(), dan sebaliknya berperilaku dengan cara yang sama.

Dokumen untuk res.render:

Merender tampilan dengan panggilan balik merespons dengan string yang ditampilkan. Ketika kesalahan terjadi next(err) dipanggil secara internal. Ketika callback diberikan baik kemungkinan kesalahan dan string yang diberikan dilewatkan, dan tidak ada respons otomatis yang dilakukan.

Bisakah seseorang tolong bantu saya mencari tahu kapan harus menggunakan yang mana?


75
2018-03-14 07:50


asal


Jawaban:


Berikut beberapa perbedaannya:

  1. Anda bisa menelepon app.render di tingkat akar dan res.render hanya di dalam rute / middleware.

  2. app.render selalu mengembalikan html  dalam fungsi panggilan balik, sedangkan res.render melakukannya hanya jika Anda telah menetapkan fungsi panggilan balik sebagai parameter ketiga Anda. Jika Anda menelepon res.render tanpa fungsi callback / parameter ketiga, html yang diberikan dikirim ke klien dengan kode status 200.

    Lihatlah contoh-contoh berikut.

    • app.render

      app.render('index', {title: 'res vs app render'}, function(err, html) {
          console.log(html)
      });
      
      // logs the following string (from default index.jade)
      <!DOCTYPE html><html><head><title>res vs app render</title><link rel="stylesheet" href="/stylesheets/style.css"></head><body><h1>res vs app render</h1><p>Welcome to res vs app render</p></body></html>
      
    • res.render tanpa parameter ketiga

      app.get('/render', function(req, res) {
          res.render('index', {title: 'res vs app render'})
      })
      
      // also renders index.jade but sends it to the client 
      // with status 200 and content-type text/html on GET /render
      
    • res.render dengan parameter ketiga

      app.get('/render', function(req, res) {
          res.render('index', {title: 'res vs app render'}, function(err, html) {
              console.log(html);
              res.send('done');
          })
      })
      
      // logs the same as app.render and sends "done" to the client instead 
      // of the content of index.jade
      
  3. res.render menggunakan app.render secara internal untuk membuat file template.

  4. Anda dapat menggunakan render berfungsi untuk membuat email html. Bergantung pada struktur aplikasi Anda, Anda mungkin tidak selalu memiliki akses ke app obyek.

    Misalnya di dalam rute eksternal:

    app.js

    var routes = require('routes');
    
    app.get('/mail', function(req, res) {
        // app object is available -> app.render
    })
    
    app.get('/sendmail', routes.sendmail);
    

    routes.js

    exports.sendmail = function(req, res) {
        // can't use app.render -> therefore res.render
    }
    

129
2018-03-14 08:38



menggunakan app.render dalam skenario di mana Anda perlu membuat tampilan tetapi tidak mengirimkannya ke klien melalui http. email html muncul dalam pikiran.


21
2018-03-14 08:08



bersama dengan dua varian ini, ada juga jade.renderFile yang menghasilkan html yang tidak perlu dilewatkan ke klien.

pemakaian-

var jade = require('jade');

exports.getJson = getJson;

function getJson(req, res) {
    var html = jade.renderFile('views/test.jade', {some:'json'});
    res.send({message: 'i sent json'});
}

getJson() tersedia sebagai rute di app.js.


1
2018-06-18 10:03