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.
- Que fait le middleware passport.session ()?
- Jade – Moteur de template: comment vérifier si une variable existe
- node.js, erreur: impossible de trouver le module ‘express’
- Node.js + Express: Itinéraires vs contrôleur
- À l’aide de PassportJS, comment transférer des champs de formulaire supplémentaires à la stratégie d’authentification locale?
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.