如何在Express / NodeJS中创buildFlash消息?

这个问题已经有一百万次了,但是我从来没有真正理解答案,当我这样做的时候,他们并不适合我的具体需求。

我目前有使用这个实现的Flash消息:

app.use(function(req, res, next){ res.locals.sessionFlash = req.session.sessionFlash; delete req.session.sessionFlash; next(); }); 

而当我想在路线中使用这个信息的时候,我必须明确地回忆一下这个:

 res.render('...', { sessionFlash: res.locals.sessionFlash }); 

有没有更简单的方法来做到这一点(最好是我不需要手动从会话中拉动消息)?

这种行为被sails.js等大型框架所sails.js

你可以在这里看到代码: https : //github.com/balderdashy/sails/blob/0506f0681590dc92986985bc39609c88b718a997/lib/router/res.js

你可以用不同的方式实现,但这是最简单的。

1:压倒一切

你可以通过"middlewares"来覆盖function

 app.use( function( req, res, next ) { // grab reference of render var _render = res.render; // override logic res.render = function( view, options, fn ) { // do some custom logic _.extend( options, {session: true} ); // continue with original render _render.call( this, view, options, fn ); } next(); } ); 

我从这个片段: https ://stackoverflow.com/a/24051339/5384679你可以复制没有lodash等

2:在新函数中包装渲染

使你自己的函数包装会话的flashMessage,你可以使用this你的优势,我用一些es6语法出来的懒惰,但可以很容易地被es5代码replace。

 res.sendView = function(path, options) { this.render(path, { sessionFlash: res.locals.sessionFlash, ...options }); } // now you can use res.sendView instead of res.render.