Quelle est la différence entre «app.render» et «res.render» dans express.js?

Documents pour app.render :

Rendre une vue avec un rappel répondant à la chaîne rendue. Ceci est la variante au niveau de l’application de res.render() , et se comporte de la même manière.

Docs pour res.render :

Rendre une vue avec un rappel répondant à la chaîne rendue. Lorsqu’une erreur survient, la next(err) est appelée en interne. Lorsqu’un rappel est fourni, l’erreur possible et la chaîne rendue sont transmises et aucune réponse automatisée n’est effectuée.

Quelqu’un pourrait-il m’aider s’il vous plaît à savoir quand utiliser lequel?

Voici quelques différences:

  1. Vous pouvez appeler app.render au niveau racine et res.render uniquement dans un itinéraire / middleware .

  2. app.render renvoie toujours le app.render html dans la fonction de rappel , alors que res.render fait uniquement lorsque vous avez spécifié la fonction de rappel comme troisième paramètre. Si vous appelez res.render sans la troisième fonction de paramètre / rappel, le code HTML rendu est envoyé au client avec un code d’état de 200 .

    Jetez un oeil aux exemples suivants.

    • app.render

       app.render('index', {title: 'res vs app render'}, function(err, html) { console.log(html) }); // logs the following ssortingng (from default index.jade) res vs app render

      res vs app render

      Welcome to res vs app render

    • res.render sans troisième paramètre

       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 avec le troisième paramètre

       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 utilise app.render interne pour rendre les fichiers modèles.

  4. Vous pouvez utiliser les fonctions de render pour créer des emails HTML . Selon votre structure de votre application, vous risquez de ne pas toujours avoir access à l’object de l’ app .

    Par exemple dans un itinéraire externe:

    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 } 

Utilisez app.render dans les scénarios où vous devez afficher une vue sans l’envoyer à un client via http. Les emails html me viennent à l’esprit.

avec ces deux variantes, il y a aussi jade.renderFile qui génère du HTML qui n’a pas besoin d’être transmis au client.

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() est disponible en tant que route dans app.js.