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:
Vous pouvez appeler app.render
au niveau racine et res.render
uniquement dans un itinéraire / middleware .
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
res.render
utilise app.render
interne pour rendre les fichiers modèles.
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.