Fly.js 一個基于Promise的、強大的、支持多種JavaScript運行時的http請求庫. 有了它,您可以使用一份http請求代碼在瀏覽器、微信小程序、Weex、Node中都能正常運行。同時可以方便配合 Vue家族的框架,最大可能的實現 Write Once Run Everywhere。
Github: https://github.com/wendux/fly
隨著 Weex 、mpvue 的發布,他們都是支持Vue.js語法。目前vue已經你能夠運行在瀏覽器、小程序和Native了。盡管各個平臺仍有差異,但已經基本能實現 Write Once Run Everywhere 。這使得我們可以在多個端上實現盡可能大限度在代碼復用。但是無論是 vue 還是Weex 、mpvue,它們本質上都只是一個View層,也就說最好的情況,也只能實現UI復用。但對于一個應用程序來說,除了UI,最重要的就是數據了,而數據來源一般都是來自網絡請求(大多數都是http)。在使用這些框架時,您的網絡請求,都需要使用平臺特定的API!這很糟糕,意味著您網絡請求的代碼不能復用,所以盡管UI可以復用,但我們還需要去適配網絡請求部分的代碼。
要解決這個問題,就需要一個能支持多個平臺網絡庫,用戶層提供統一的API,將平臺差異在底層屏蔽。而 Fly.js就是這醬紫的一個網絡庫,為了方便axios使用者遷移,fly.js API設計風格和axios相似(但不完全相同)!
Fly.js 通過在不同 JavaScript 運行時通過在底層切換不同的 Http Engine來實現多環境支持,但同時對用戶層提供統一、標準的Promise API。不僅如此,Fly.js還支持請求/響應攔截器、自動轉化JSON、請求轉發等功能,詳情請參考:https://github.com/wendux/fly
目前Fly.js支持的平臺包括:Node.js 、微信小程序 、Weex 和瀏覽器,這些平臺的 JavaScript 運行時都是不同的。更多的平臺正在持續添加中,請保持關注。
下面示例如無特殊說明,則在所有支持的平臺下都能執行。
//不同平臺可能需要引入不同文件,詳情見文檔 var fly=require("flyio") //通過用戶id獲取信息,參數直接寫在url中 fly.get('/user?id=133') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); //query參數通過對象傳遞 fly.get('/user', { id: 133 }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
fly.post('/user', { name: 'Doris', age: 24 phone:"18513222525" }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });
function getUserRecords() { return fly.get('/user/133/records'); } function getUserProjects() { return fly.get('/user/133/projects'); } fly.all([getUserRecords(), getUserProjects()]) .then(fly.spread(function (records, projects) { //兩個請求都完成 })) .catch(function(error){ console.log(error) })
Fly支持請求/響應攔截器,可以通過它在請求發起之前和收到響應數據之后做一些預處理。
//添加請求攔截器 fly.interceptors.request.use((request)=>{ //給所有請求添加自定義header request.headers["X-Tag"]="flyio"; //打印出請求體 console.log(request.body) //終止請求 //var err=new Error("xxx") //err.request=request //return Promise.reject(new Error("")) //可以顯式返回request, 也可以不返回,沒有返回值時攔截器中默認返回request return request; }) //添加響應攔截器,響應攔截器會在then/catch處理之前執行 fly.interceptors.response.use( (response) => { //只將請求結果的data字段返回 return response.data }, (err) => { //發生網絡錯誤后會走到這里 //return Promise.resolve("ssss") } )
除過以上這些使用,Fly.js 還有很多其它強大的功能,詳情請移步Fly.js.