Express.js में "app.render" और "res.render" के बीच क्या अंतर है?


82

इसके लिए दस्तावेज़ app.render:

रेंडर स्ट्रिंग के साथ कॉलबैक रिस्पांस के साथ एक दृश्य प्रस्तुत करना। यह ऐप-स्तरीय संस्करण है res.render(), और अन्यथा उसी तरह व्यवहार करता है।

इसके लिए दस्तावेज़ res.render:

रेंडर किए गए स्ट्रिंग के साथ कॉलबैक प्रतिक्रिया के साथ एक दृश्य प्रस्तुत करना। जब कोई त्रुटि होती next(err)है तो आंतरिक रूप से आह्वान किया जाता है। जब कॉलबैक प्रदान किया जाता है, तो दोनों संभावित त्रुटि और प्रदान की गई स्ट्रिंग को पारित किया जाता है, और कोई स्वचालित प्रतिक्रिया नहीं की जाती है।

मैं कैसे पता लगा सकता हूं कि किसका उपयोग कब करना है

जवाबों:


146

यहाँ कुछ अंतर हैं:

  1. आप कॉल कर सकते हैं app.renderपर रूट स्तर और res.renderकेवल एक मार्ग / मिडलवेयर अंदर

  2. app.renderहमेशा html कॉलबैक फ़ंक्शन में लौटता है , जबकि res.renderऐसा केवल तब होता है जब आपने कॉलबैक फ़ंक्शन को अपने तीसरे पैरामीटर के रूप में निर्दिष्ट किया हो। यदि आप res.renderतीसरे पैरामीटर / कॉलबैक फ़ंक्शन के बिना कॉल करते हैं, तो रेंडर किया गया HTML क्लाइंट को स्थिति कोड के साथ भेजा जाता है 200

    निम्नलिखित उदाहरणों पर एक नज़र डालें।

    • 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 तीसरे पैरामीटर के बिना

      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 तीसरे पैरामीटर के साथ

      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टेम्पलेट फ़ाइलों को प्रस्तुत करने के लिए आंतरिक रूप से उपयोग करता है ।

  4. HTML ईमेलrender बनाने के लिए आप फ़ंक्शन का उपयोग कर सकते हैं । आपके ऐप की संरचना के आधार पर, आपके पास हमेशा ऑब्जेक्ट के लिए acces नहीं हो सकता है ।app

    बाहरी मार्ग के अंदर उदाहरण के लिए:

    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 कैश मैकेनिज्म के बारे में क्या ?? क्या app.renderयह भी उपयोग करता है?
fider

ग्राहक पक्ष में शीर्षक कुंजी मान कैसे प्राप्त कर सकते हैं? मैं HTML फाइल (ejs) का उपयोग कर रहा हूं
मंगेश साठे

23

उन app.renderपरिदृश्यों में उपयोग करें जहाँ आपको एक दृश्य प्रस्तुत करने की आवश्यकता है लेकिन इसे क्लाइंट को http के माध्यम से नहीं भेजें। html ईमेल स्प्रिंग्स को माइंड करता है।


1

इन दो वेरिएंट के साथ, वहाँ भी है jade.renderFileजो html उत्पन्न करता है जिसे क्लाइंट को पारित करने की आवश्यकता नहीं है।

usage-

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. में मार्ग के रूप में उपलब्ध है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.