中間件:
connect-flash
地址:https://github.com/jaredhanson/connect-flash
flash消息用于重定向跳轉時傳遞消息,在Express中集成方法如下:
在項目中集成
- 安裝
connect-flash
中間件
npm install --save connect-flash
- 在main js 中引入(通常是
app.js
或者項目名.js
文件)中間件并加載
var flash = require('connect-flash');
app.use(flash());
到這里,我們的集成工作已經完成劫瞳,就可以在router
中使用類似
req.flash('flash_success_message', '文章添加成功!');
傳遞flash消息了宙搬!
下面教大家如何完整定義一套flash message
前后端解決方案秸侣。
在項目中使用
一套完整的flash解決方案我的理解是:
后端發(fā)送flash message
,前端動態(tài)響應flash message
一次立镶。
為什么說是“一次”呢师逸?舉個栗子:
當我們開發(fā)刪除數據功能時司倚,通常會這么做:點擊刪除按鈕,將數據ID
傳遞到后端,后端通過id动知,將數據從數據庫里刪除皿伺,并重定向redirect
到數據列表頁,重定向的時候盒粮,我們可以發(fā)送一條flash message
心傀,告訴用戶數據刪除成功。這個時候拆讯,當我們再次刷新數據列表頁時,將不會出現之前那條flash message
养叛。
下面我們開始處理整套flash message
流程:
- 在main js(通常是
app.js
或者項目名.js
文件)中所有的路由的最上面加入flash message
處理中間件:
app.use(function (req, res, next) {
res.locals.flash_success_message = req.flash('flash_success_message');
res.locals.flash_error_message = req.flash('flash_error_message');
next();
});
一定要放到所有路由的最上面种呐,因為express處理請求是由上往下,這樣可以將所有的請求都過濾一遍弃甥。
- 在頁面中統(tǒng)一處理
我用的是express-handlebars
和bootstrap
爽室,所以處理方式如下:
{{#if flash_success_error}}
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>錯誤!</strong> {{flash_success_error}}.
</div>
{{/if}}
{{#if flash_success_message}}
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>恭喜!</strong> {{flash_success_message}}.
</div>
{{/if}}
具體意思就是:前端視圖中動態(tài)判斷中間件中定義的flash_success_error
和flash_success_message
兩個變量,如果有值淆攻,就將其對應的內容渲染處理阔墩。
至此,整個開發(fā)過程完畢瓶珊。
有興趣的童鞋可以關注一下我的開源項目ANodeBlog了解更多內容啸箫!