ExpressJS 3.0 Comment passer res.les habitants de jade vue?
Je veux afficher un message flash après qu'un utilisateur ne parvient pas à signer, mais j'ai juste ne peux pas obtenir les variables à afficher dans ma Jade points de vue.
J'ai quelques morceaux, je sais que je dois l'utiliser dans mon application.configurer():
app.use (req, res, next) ->
res.locals.session = req.session
Et je vais définir ce que le message flash est après les MESSAGES de l'utilisateur le mot de passe erroné:
exports.postSession = (req, res) ->
users = require '../DB/users'
users.authenticate(req.body.login, req.body.password, (user) ->
if(user)
req.session.user = user
res.redirect(req.body.redirect || '/')
else
req.session.flash = 'Authentication Failure!'
res.render('sessions/new', {title:'New', redirect: req.body.redirect })
)
Je ne sais pas comment accéder à res.locals.session
dans ma Jade fichier. Je doute que je suis en train de tout droit. Cette question est un lot comme celui-ci: La migration Express.js 2 à 3, en particulier de l'app.dynamicHelpers() app.les locaux.utilisez? mais je ne peux toujours pas le faire fonctionner. Il serait apprécié si quelqu'un pourrait me montrer un exemple simple de mettre des valeurs dans res.local et d'accéder à une vue.
p.s. Je ne sais à propos de connectez-flash, mais j'ai besoin de comprendre comment faire des choses disponibles dans les vues.
C'est mon app:
app.configure(() ->
app.set('views', __dirname + '/views')
app.set('view engine', 'jade')
app.use(express.bodyParser())
app.engine('.jade', require('jade').__express)
app.use(express.methodOverride())
app.use(express.cookieParser())
app.use(express.session({ store: new express.session.MemoryStore({reapInterval: 50000 * 10}), secret: 'chubby bunny' }))
app.use(express.static(__dirname + '/public'))
app.use((req, res, next) ->
res.locals.session = req.session
next()
)
app.use(app.router)
)
- p.p.s Aussi où la documentation est-elle pour cela? J'ai été à la recherche dans le guide de Migration, la Express site et se Connecter site pourtant, je ne peux toujours pas comprendre... Peut-être c'est juste moi, mais j'ai l'impression que je suis mal à apprendre ExpressJS parce que sa documentation est si rare.
- vous ne pouvez pas y accéder comme
session.flash
? - Quand je fais cela en jade:
- if(session.flash)
il me donne une erreur qui dit que la session n'est pas définie.. Mais il n'y a rien sur la façon dont j'ai mis les choses ci-dessus? - est votre application.utilisation sur app.routeur ou de l'application[VERBE]?
- je ne sais pas la distinction entre application.utilisation sur app.routeur ou de l'application[VERBE]. Dans ma tête sa pour le routeur comme dans ces états dans l'application.utiliser sont évalués par rapport à l'immédiate de l'état du serveur avant qu'une demande est routée... je ne sais pas quelle application.l'utilisation des moyens dans le cadre de l'application[VERBE].
- app[VERBE] est quoi comme app.obtenez de l'application.post. ce sont toutes les routes à l'intérieur de l'app.utilisation(app.routeur), qui devrait être après que tous les autres
app.use
à l'exception de toute gestionnaires d'erreur. quel ordre sont vous de les mettre dans? - Ah Ok, mon application.utilisation(app.routeur) est définitivement après mon
app.use (req, res, next) -> res.locals.session = req.session
. Donc au-delà de la commande de mon application.usage() les déclarations, c'est fondamentalement la façon de créer de la res.les variables locales? Aussi, j'essaye d'accéder à ces incendies.les variables locales dans mon fichier de mise en page. je ne pense pas que ce soit le problème, mais il des restrictions sur les vues qui ont accès à vos res.les habitants?? - n'y sont pas. pouvez-vous publier votre app?
- OK j'ai posté mon application. app.utilisation(app.routeur) est en dessous de tous les middleware consolidés.
- supprimer
app.engine
. voir ce qui se passe. vous n'en avez pas besoin car vous l'avez déjà faitapp.set('view engine', 'jade')
- Hey Jonathan. Merci pour vos réponses, j'ai réussi à résoudre mon problème car j'ai réalisé que je faisais de redirection comme ceci:
res.redirect('sessions/new',{title: 'New'})
je ne suis même pas sûr de pourquoi ça a apporté de la page mais res.redirection est censé être utilisé comme ceci maintenant:res.redirect([code,] url)
de toute façon, erreur stupide de ma part, merci encore pour votre attention. - lol ce n'était pas dans votre code. et oui une redirection devrait jamais avoir un objet.
Vous devez vous connecter pour publier un commentaire.
Juste pour donner un court résumé pour tout le monde qui a le même problème et ai l'impression que ça a été résolu en changeant
res.redirect
.Il est très important de mettre votre
app.use
middleware avantapp.router
. Voir les commentaires par TJ Holowaychuck, l'auteur de l'expressVoici un exemple d'utilisation d'une nouvelle installation d'express v3.0.0rc4
app.js:
index.jade:
Si vous utilisez express.session (), vous devez appeler votre fonction APRÈS express.session() mais AVANT app.routeur, à l'intérieur de l'app.configurer().
app.js
index.jade