国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

Express框架之connect-flash詳解

2024-05-06 15:16:32
字體:
來源:轉載
供稿:網友

第一步:我們首先來看看這個插件的使用

var flash = require('connect-flash'); app.use(flash());//Express使用這個插件 

第二步:我們看看其內部是如何實現的

var format = require('util').format; var isArray = require('util').isArray; 

依賴的模塊為node.js的核心模塊util

module.exports = function flash(options) {  options = options || {};  //如果用戶沒有指定unsafe參數,那么safe就是true;否則如果用戶指定了unsafe為false那么safe就是true  //也就是說這個插件只能指定一個配置項就是unsafe,默認不指定為就是安全的!  var safe = (options.unsafe === undefined) ? true : !options.unsafe;  return function(req, res, next) {   //如果req.flash存在,同時是safe的那么直接調用下面一個插件,這個插件就不執行了   if (req.flash && safe) { return next(); }   //如果上面的條件不滿足那么為req指定flash屬性,其值為下面的_flash函數   req.flash = _flash;   next();  } } 

很顯然,我們看到可以傳入options參數,如果沒有指定unsafe那么unsafe就是true,此時safe就是false。如果用戶明確指定了unsafe為false那么safe為true,如果明確指定了unsafe為false那么safe就是true。如果safe為true那么直接調用下面一個中間件。

我們現在看看req對象的flash方法是怎么樣的:

function _flash(type, msg) {  //如果當前req對象沒有session域,那么拋出錯誤  if (this.session === undefined) throw Error('req.flash() requires sessions');  //為req.session.flash指定一個域,默認為空對象  var msgs = this.session.flash = this.session.flash || {};  if (type && msg) {   // util.format is available in Node.js 0.6+   //如果當前是Node.js 0.6+以上的環境,同時傳入的參數有兩個以上   if (arguments.length > 2 && format) {    var args = Array.prototype.slice.call(arguments, 1);    //獲取第二個參數以后的數組    msg = format.apply(undefined, args);    //msg保存的是第二個參數以后的值,并對這個值進行了format處理   } else if (isArray(msg)) {    msg.forEach(function(val){     (msgs[type] = msgs[type] || []).push(val);    });    return msgs[type].length;    //如果傳入的第二個參數是一個數組,那么全部把數據綁定到req.session.flash域里面,其中數據類型為{'info':['school','home']}    //然后返回的是特定的長度   }   //如果參數不多于2,同時msg也不是數組,那么把msg添加到req.session.flash中然后返回   return (msgs[type] = msgs[type] || []).push(msg);  } else if (type) {   //如果沒有指定msg,僅僅指定了type,這時候我們獲取到req.session.flash中特定類型的數據,同時把數據從req.session.flash中刪除   var arr = msgs[type];   delete msgs[type];   return arr || [];  } else {   //如果調用方式如flash()也就是不傳入任何參數,這時候直接清空了req.session.flash中的數據   this.session.flash = {};   return msgs;  } }             
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东阳市| 萨嘎县| 炎陵县| 静安区| 桐庐县| 屏东县| 宜春市| 莒南县| 上思县| 巴里| 阿拉善左旗| 兴仁县| 应用必备| 海伦市| 涞水县| 陇西县| 前郭尔| 黄山市| 吉木乃县| 周至县| 江门市| 陕西省| 松江区| 舞钢市| 神池县| 原阳县| 名山县| 剑河县| 江津市| 宜章县| 盐亭县| 南宁市| 嵊泗县| 乌鲁木齐县| 德安县| 凤山市| 石家庄市| 通州市| 张家港市| 淄博市| 仙桃市|