最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Express框架之connect-flash詳解

 更新時(shí)間:2017年05月31日 14:50:54   作者:liangklfang  
本篇文章主要介紹了Express框架之connect-flash詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

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

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

第二步:我們看看其內(nèi)部是如何實(shí)現(xiàn)的

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

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

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

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

我們現(xiàn)在看看req對象的flash方法是怎么樣的:

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

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

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

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

(3)否則如果僅僅傳入了type表示獲取指定類型的數(shù)據(jù)然后返回,并把數(shù)據(jù)從req.session.flash中刪除(這樣只要我們調(diào)用這個(gè)方法獲取了數(shù)據(jù)那么就從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'); 
// => []這時(shí)候info已經(jīng)清空了 

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

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

這個(gè)插件一般和redirect一起使用,保證在渲染下一個(gè)頁面的時(shí)候數(shù)據(jù)可用。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 如何利用Node.js做簡單的圖片爬取

    如何利用Node.js做簡單的圖片爬取

    這篇文章主要介紹了如何利用Node.js做簡單的圖片爬取,爬蟲的主要目的是收集互聯(lián)網(wǎng)上公開的一些特定數(shù)據(jù),本文介紹用于網(wǎng)絡(luò)抓取的node.js包,完成一個(gè)簡單的爬蟲案例來爬取網(wǎng)頁上圖片并下載到本地
    2022-06-06
  • node.js 動(dòng)態(tài)執(zhí)行腳本

    node.js 動(dòng)態(tài)執(zhí)行腳本

    其中的Script對象,就與require('vm')返回的對象很相似,而實(shí)質(zhì)上,vm模塊就是對Script對象的封裝。
    2016-06-06
  • Node.js實(shí)現(xiàn)爬取網(wǎng)站圖片的示例代碼

    Node.js實(shí)現(xiàn)爬取網(wǎng)站圖片的示例代碼

    本文將利用Node.js開發(fā)一個(gè)小示例—爬取某圖片網(wǎng)站的圖片,文中涉及的知識點(diǎn)有https模塊、cheerio模塊、fs模塊和閉包,感興趣的可以了解一下
    2022-04-04
  • node.js中的http.get方法使用說明

    node.js中的http.get方法使用說明

    這篇文章主要介紹了node.js中的http.get方法使用說明,本文介紹了http.get的方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 使用nodeJS中的fs模塊對文件及目錄進(jìn)行讀寫,刪除,追加,等操作詳解

    使用nodeJS中的fs模塊對文件及目錄進(jìn)行讀寫,刪除,追加,等操作詳解

    nodeJS中fs模塊對系統(tǒng)文件及目錄進(jìn)行讀寫操作,本文將詳細(xì)介紹nodejs中的文件操作模塊fs的使用方法
    2020-02-02
  • Nodejs中koa2連接mysql的實(shí)現(xiàn)示例

    Nodejs中koa2連接mysql的實(shí)現(xiàn)示例

    本文主要介紹了Nodejs中koa2連接mysql的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • node.js中的fs.closeSync方法使用說明

    node.js中的fs.closeSync方法使用說明

    這篇文章主要介紹了node.js中的fs.closeSync方法使用說明,本文介紹了fs.closeSync方法說明、語法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nodejs實(shí)現(xiàn)的一個(gè)靜態(tài)服務(wù)器實(shí)例

    Nodejs實(shí)現(xiàn)的一個(gè)靜態(tài)服務(wù)器實(shí)例

    這篇文章主要介紹了Nodejs實(shí)現(xiàn)的一個(gè)靜態(tài)服務(wù)器實(shí)例,本文實(shí)現(xiàn)的靜態(tài)服務(wù)器實(shí)例包含cache功能、壓縮功能等,需要的朋友可以參考下
    2014-12-12
  • Node在Controller層進(jìn)行數(shù)據(jù)校驗(yàn)的過程詳解

    Node在Controller層進(jìn)行數(shù)據(jù)校驗(yàn)的過程詳解

    這篇文章主要給大家介紹了關(guān)于Node在Controller層進(jìn)行數(shù)據(jù)校驗(yàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • koa-router源碼學(xué)習(xí)小結(jié)

    koa-router源碼學(xué)習(xí)小結(jié)

    這篇文章主要介紹了koa-router源碼學(xué)習(xí)小結(jié),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09

最新評論

开江县| 张家口市| 富川| 班玛县| 浑源县| 饶阳县| 通渭县| 靖西县| 海阳市| 永济市| 江城| 交口县| 乌苏市| 巴塘县| 宁津县| 昌乐县| 且末县| 海口市| 吉林省| 兴义市| 新绛县| 宜都市| 淮安市| 牙克石市| 楚雄市| 海兴县| 临沂市| 南木林县| 淮安市| 宁远县| 望谟县| 平山县| 南安市| 鹰潭市| 汝南县| 磐安县| 项城市| 怀集县| 浏阳市| 修文县| 云阳县|