中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Express框架之connect-flash詳解

發布時間:2020-09-21 22:12:02 來源:腳本之家 閱讀:156 作者:liangklfang 欄目:web開發

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

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; 
 } 
} 

(1)如果傳入的參數多于兩個,那么首先獲取第二個以及以后的參數,然后對第二個以后的參數進行format操作,最后把數據封裝到req.session.flash中,同時返回。

req.flash('info', 'email has been sent to %s.', userName); 

(2)如果傳入的第二個參數是一個數組,那么把這個數組每一個元素封裝到req.session.flash中,然后返回特定type的數據的長度

(3)否則如果僅僅傳入了type表示獲取指定類型的數據然后返回,并把數據從req.session.flash中刪除(這樣只要我們調用這個方法獲取了數據那么就從session中刪除了)

req.flash('info', 'email sent'); 
 req.flash('error', 'email delivery failed'); 
 req.flash('info', 'email re-sent'); 
req.flash('info'); 
// => ['email sent', 'email re-sent'] 
req.flash('info'); 
// => []這時候info已經清空了 

(4)如果用戶沒有傳入任何參數那么清空req.session.flash域,但是返回的是原來的局部變量保存到的req.session.flash對象

else { 
  //如果調用方式如flash()也就是不傳入任何參數,這時候直接清空了req.session.flash中的數據 
  this.session.flash = {}; 
  return msgs; 
 } 

這個插件一般和redirect一起使用,保證在渲染下一個頁面的時候數據可用。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛纳斯县| 台江县| 陈巴尔虎旗| 新建县| 福贡县| 绥阳县| 赤水市| 宝应县| 海宁市| 潞城市| 屏东市| 黄梅县| 崇仁县| 武乡县| 桐柏县| 喀喇沁旗| 环江| 昭平县| 邯郸市| 浦县| 章丘市| 崇礼县| 监利县| 大宁县| 桂林市| 蒲江县| 德保县| 普格县| 曲水县| 九龙城区| 屏东市| 西贡区| 同心县| 洛扎县| 台江县| 景德镇市| 荣成市| 崇义县| 广丰县| 闵行区| 历史|