第一次寫博客,有點想在博客園試水的感覺,也分享下覺得有用的東西(源碼自己寫的)
什么是javascript中間件呢?函數middle就是用來構建中間件的,我用例子說明下
下面我定義了一個函數use,在use第一個參數傳入一個回調函數,如下
function use(func){ func("參數1","參數2") }
//正常的傳入回調函數的用法。 var func=function(req,res){ console.log(req)//=>參數1 console.log(res)//=>參數2 } use(func)
//使用中間件構建,如下,middle函數在下面有定義,往下看 var func=middle(function(req,res,next){ console.log("這里是新添加中間部分") console.log(req)//=>參數1 console.log(res)//=>參數2 next() ;//next指向下一個函數 },function(req,res,next){ console.log("這里是新添加中間部分") console.log(req)//=>參數1 console.log(res)//=>參數2 next() ;//next指向下一個函數 },function(req,res,next){ //這是原始的函數 console.log(req)//=>參數1 console.log(res)//=>參數2 }) use(func)
中間件的用法就這么簡單,但是功能很強大,想想你可以在nodejs中監聽網頁鏈接的時候,可以把用戶驗證、查找數據、顯示數據都分離出來,通過中間件組合成一個最終你想要的邏輯函數,想想就覺得痛快。
中間件的源碼如下,代碼很少,你也可以去github里面下載源碼,https://github.com/caoke90/middle/blob/master/middle.js
var middle=function(){ var next=function(func1,func2){ return function(){ var arg=Array.prototype.slice.call(arguments) var arr=[].concat(arg) arg.push(function(){ if(typeof func2=="function"){ func2.apply(this,arr) } }) return func1.apply(this,arg); } } var arg=Array.prototype.slice.call(arguments) var func=arg[arg.length-1] for(var i=arg.length-2;i>=0;i--){ func=next(arg[i],func) } return func }
寫完后有爽快的感覺,各位大大如果覺得喜歡的話,攢個吧,我會繼續努力的。