Je souhaite afficher un message Flash après que un utilisateur ne parvienne pas à vous connecter, mais je ne peux tout simplement pas obtenir les variables de se présenter dans mes vues de jade.
J'ai des morceaux, je sais que je dois l'utiliser dans mon app.configure ():
app.use (req, res, next) ->
res.locals.session = req.session
Et je vais définir ce que le message Flash est après que l'utilisateur affiche le mauvais mot de passe:
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 mon fichier jade. Je doute que je puisse tout mettre en place. Cette question est beaucoup comme celle-ci: Migration express.js 2 à 3, spécifiquement app.dynamichelpers () à app.Locals.utilisez-vous? Mais je ne peux toujours pas le faire fonctionner. Il serait très apprécié si quelqu'un ne peut me montrer qu'un simple exemple de réglage de valeurs en res.Local et en accédant dans une vue.
p.s. Je sais à propos de Connect-Flash mais j'ai besoin de comprendre comment faire des choses disponibles sur les points de vue.
Ceci est mon application:
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)
)
Juste pour donner un bref résumé de tous ceux qui ont le même problème et ont eu l'impression que cela a été résolu de changer res.redirect
.
Il est très important de mettre votre app.use
middleware avant app.router
. Voir les commentaires de TJ Holowaychuck, l'auteur d'Express
Voici un exemple utilisant une nouvelle installation d'express v3.0.0rc4
app.js:
app.use(function(req, res, next){
res.locals.variable = "some content";
next();
})
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
index.jade:
extends layout
block content
h1= title
p Welcome to #{title}
p= variable
Si vous utilisez Express.Session (), vous devez appeler votre fonction [~ # ~] après [~ # ~ ~] express.session () Mais [~ # ~] avant [~ # ~ ~] app.Router , à l'intérieur de l'application. configurer ().
app.js
app = express();
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.session());
// Give Views/Layouts direct access to session data.
app.use(function(req, res, next){
res.locals.session = req.session;
next();
});
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
index.jade
extends layout
block content
h1= title
p My req.session.var_name is set to #{session.var_name}