ユーザーがサインインに失敗した後にフラッシュメッセージを表示したいのですが、Jadeビューに変数を表示できません。
私はいくつかの部分を持っています、私はこれを私のapp.configure()で使用する必要があることを知っています:
app.use (req, res, next) ->
res.locals.session = req.session
そして、ユーザーが間違ったパスワードを入力した後のフラッシュメッセージを設定します。
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 })
)
Jadeファイルのres.locals.session
にアクセスする方法がわかりません。すべてを正しく設定しているとは思えません。この質問は次のようなものです: Express.js 2から3、具体的にはapp.dynamicHelpers()からapp.locals.use? に移行していますが、私はそれでも動作しません。誰かがres.localに値を設定し、ビューでそれらにアクセスする簡単な例を見せていただければ幸いです。
pS接続フラッシュについては知っていますが、ビューで使用できるようにする方法を理解する必要があります。
これは私のアプリです:
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)
)
同じ問題を抱えており、res.redirect
を変更することで解決した印象を得たすべての人に短い要約を与えるためだけに。
app.use
ミドルウェアの前にapp.router
を置くことは非常に重要です。 expressの作者であるTJ Holowaychuckのコメントをご覧ください。
以下は、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
Express.session()を使用している場合は、関数を呼び出す必要があります[〜#〜] after [〜#〜]express.session()しかし[〜#〜] before [〜#〜]app.router、アプリ内。構成、設定()。
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}