Express.js'de "app.render" ve "res.render" arasındaki fark nedir?


82

İçin Dokümanlar app.render:

Oluşturulan dizeyle yanıt veren bir geri arama ile bir görünüm oluşturun. Bu, uygulamasının uygulama düzeyindeki varyantıdır res.render()ve aksi halde aynı şekilde davranır.

İçin Dokümanlar res.render:

Oluşturulan dizeyle yanıt veren bir geri arama ile bir görünüm oluşturun. Bir hata oluştuğunda next(err)dahili olarak çağrılır. Bir geri arama sağlandığında, hem olası hata hem de işlenen dizge geçilir ve otomatik yanıt gerçekleştirilmez.

Hangisini ne zaman kullanacağımı nasıl anlayabilirim?

Yanıtlar:


146

İşte bazı farklılıklar:

  1. Sen diyebilirsin app.renderüzerinde kök düzeyinde ve res.rendersadece bir rota / katman içine .

  2. app.renderher zaman geri html arama işlevinde döndürür , oysa res.renderbunu yalnızca geri arama işlevini üçüncü parametreniz olarak belirttiğinizde yapar. res.renderÜçüncü parametre / geri arama işlevi olmadan çağırırsanız , işlenen html istemciye durum koduyla gönderilir 200.

    Aşağıdaki örneklere bir göz atın.

    • 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 üçüncü parametre olmadan

      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 üçüncü parametre ile

      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.renderapp.renderşablon dosyalarını işlemek için dahili olarak kullanır .

  4. HTML e-postalarırender oluşturmak için işlevleri kullanabilirsiniz . Uygulamanızın yapısına bağlı olarak, nesneye her zaman erişiminiz olmayabilir .app

    Örneğin harici bir rota içinde:

    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
    }
    

@zeMicro önbellek mekanizması ne olacak ? Mı app.renderçok kullanıyor?
2014

İstemci tarafında başlık Anahtar değeri nasıl elde edilir? HTML dosyası (ejs) kullanıyorum
Mangesh Sathe,

23

app.renderBir görünümü oluşturmanız gereken ancak bunu bir istemciye http yoluyla göndermediğiniz senaryolarda kullanın . html e-postaları akla gelir.


1

Bu iki değişkenle birlikte jade.renderFile, istemciye iletilmesi gerekmeyen html üreten de vardır.

kullanım-

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() app.js'de rota olarak mevcuttur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.