亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

支持所有JavaScript運(yùn)行時(shí)的HTTP網(wǎng)絡(luò)庫(kù)-Fly.js

liaosilzu2007 / 3786人閱讀

摘要:已支持的平臺(tái)官方支持的運(yùn)行時(shí)包括瀏覽器微信小程序。瀏覽器端支持全局?jǐn)r截。支持請(qǐng)求配置頁(yè)面內(nèi)嵌到原生中時(shí),支持將請(qǐng)求轉(zhuǎn)發(fā)到,支持直接請(qǐng)求圖片。

Fly.js 的定位是成為 Javascript http請(qǐng)求的終極解決方案,也就是說(shuō),在任何能夠執(zhí)行 Javascript 的環(huán)境,只要具有訪問(wèn)網(wǎng)絡(luò)的能力,F(xiàn)ly都能運(yùn)行在其上,并提供統(tǒng)一的Promise based API。

Github: https://github.com/wendux/fly

已支持的平臺(tái)

Fly.js 官方支持的Javascript運(yùn)行時(shí)包括:瀏覽器、node、微信小程序。這意味著你可以在這些平臺(tái)使用同一份代碼來(lái)發(fā)起http請(qǐng)求。值得一提是集成到web應(yīng)用時(shí)(瀏覽器環(huán)境), fly.js的大小只有4.7KB, 非常輕量。

統(tǒng)一的用戶層API

Fly.js 支持的JavaScript運(yùn)行時(shí)是不同的,但提供的用戶層API是統(tǒng)一的,API是基于Promise的,風(fēng)格和 axios 很像(但不完全相同),下面看幾個(gè)例子:

發(fā)起GET請(qǐng)求
var fly=require("flyio")
//通過(guò)用戶id獲取信息,參數(shù)直接寫(xiě)在url中
fly.get("/user?id=133")
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

//query參數(shù)通過(guò)對(duì)象傳遞
fly.get("/user", {
      id: 133
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
發(fā)起POST請(qǐng)求
fly.post("/user", {
    name: "Doris",
    age: 24
    phone:"18513222525"
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });
發(fā)起多個(gè)并發(fā)請(qǐng)求
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) {
    //兩個(gè)請(qǐng)求都完成
  }))
  .catch(function(error){
    console.log(error)
  })

…….

上面只是Fly.js的簡(jiǎn)單使用,F(xiàn)ly.js 除了支持Promise風(fēng)格的API之外,另外還支持:

支持請(qǐng)求/響應(yīng)攔截器。

自動(dòng)轉(zhuǎn)換 JSON 數(shù)據(jù)。

瀏覽器端支持全局Ajax攔截。

API支持typeScript。

支持請(qǐng)求配置

H5頁(yè)面內(nèi)嵌到原生 APP 中時(shí),支持將 http 請(qǐng)求轉(zhuǎn)發(fā)到 Native,支持直接請(qǐng)求圖片。

詳細(xì)的文檔請(qǐng)參考 github fly .

支持多平臺(tái)的原理

Fly 引入了Http Engine 的概念,所謂 Http Engine,就是真正發(fā)起 http 請(qǐng)求的引擎,這在瀏覽器中一般都是XMLHttpRequest,而在其它JavaScript運(yùn)行時(shí)下,需要提供相應(yīng)平臺(tái)的Http Engine,F(xiàn)ly 正是通過(guò)切換不同平臺(tái)的 Http Engine 而實(shí)現(xiàn)同時(shí)支持不同JavaScript運(yùn)行時(shí)的 。

Http Engine 是一個(gè)標(biāo)準(zhǔn)的接口協(xié)議,內(nèi)部實(shí)現(xiàn)了真正的HTTP請(qǐng)求邏輯,不同JavaScript運(yùn)行時(shí)只需要實(shí)現(xiàn)Http Engine的接口協(xié)議,就可以無(wú)縫集成到Fly.js中。

如何支持新的JavaScript運(yùn)行時(shí)

如上所述,要支持新的JavaScript運(yùn)行時(shí)時(shí),我們需要實(shí)現(xiàn)該平臺(tái)下的Http Engine即可,但是從頭實(shí)現(xiàn)一個(gè)Http Engine 是非常復(fù)雜的,為此,F(xiàn)ly 官方提供了一個(gè) EngineWrapper 幫助工具,它可以通過(guò)一個(gè)adapter(適配器)生成一個(gè)完整的 Http Engine,所以,我們只需要實(shí)現(xiàn)一個(gè)adapter就行。

一個(gè)簡(jiǎn)單的例子
var engine= EngineWrapper(function (request,responseCallback) {
            responseCallback({
                statusCode:200,
                responseText:"你變或者不變,我都不變?。",
                extraFeild:"自定義字段"
            })
        })
fly.engine=engine;

fly.get("../package.json").then(d=>{
    log(d.data)
    log(d.extraFeild)
})

控制臺(tái)輸出

> 你變或者不變,我都不變?。
> 自定義字段

EngineWrapper的參數(shù)就是adapter, 在這個(gè)例子中,adapter 并沒(méi)有真正發(fā)起 http 請(qǐng)求,而是直接返回了固定內(nèi)容,這樣 fly 上層請(qǐng)求任何接口收到的內(nèi)容永遠(yuǎn)都是相同的。完整的示例請(qǐng)移步:Fly.js-Http Engine .

遠(yuǎn)程Http Engine

我們說(shuō)過(guò),在瀏覽器環(huán)境中,fly 使用的默認(rèn)engine 就是 XMLHttpRequest?,F(xiàn)在我們想想混合APP, 如果能在 Native(Android、IOS) 上實(shí)現(xiàn)一個(gè)engine,然后供瀏覽器中的 fly 使用,那么也就會(huì)將原本應(yīng)該在瀏覽器中發(fā)起的請(qǐng)求重定向到了 Native 上。而這個(gè)在 Native 上實(shí)現(xiàn)的 engine,我們稱其為遠(yuǎn)程 Http Engine,這是因?yàn)檎{(diào)用者和執(zhí)行者并不在同一個(gè)環(huán)境。

通過(guò)遠(yuǎn)程Http Engine, Fly.js可以實(shí)現(xiàn)一個(gè)逆天的功能--請(qǐng)求重定向。它可以將本來(lái)會(huì)在瀏覽器中發(fā)起的http請(qǐng)求重定向到Native, 這樣就可以在Native 上進(jìn)行統(tǒng)一的請(qǐng)求管理、cookie同步、證書(shū)檢驗(yàn)、緩存和訪問(wèn)控制等,詳細(xì)的內(nèi)容請(qǐng)參考: Fly.js 請(qǐng)求重定向 。

最后

貼出Fly.js的Github源碼地址:https://github.com/wendux/fly , 詳細(xì)的文檔請(qǐng)移步github, 如果你喜歡Fly.js,歡迎star.

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/92961.html

相關(guān)文章

  • 在小程序/mpvue中使用flyio發(fā)起網(wǎng)絡(luò)請(qǐng)求

    摘要:上一篇文章介紹了在快應(yīng)用中使用,本文主要介紹一下如何在微信小程序中使用。下面我們看看在微信小程序中和中如何使用微信小程序微信小程序采用開(kāi)發(fā)技術(shù)棧,使用語(yǔ)言開(kāi)發(fā),但是運(yùn)行時(shí)和瀏覽器又有所不同,導(dǎo)致等庫(kù)無(wú)法在微信小程序中使用,而可以。 Fly.js 一個(gè)基于Promise的、強(qiáng)大的、支持多種JavaScript運(yùn)行時(shí)的http請(qǐng)求庫(kù). 有了它,您可以使用一份http請(qǐng)求代碼在瀏覽器、微信...

    mumumu 評(píng)論0 收藏0
  • JS HTTP 請(qǐng)求終極解決方案 - fly.js

    摘要:支持請(qǐng)求響應(yīng)攔截器。定位與目標(biāo)的定位是成為請(qǐng)求的終極解決方案。攔截器支持請(qǐng)求響應(yīng)攔截器,可以通過(guò)它在請(qǐng)求發(fā)起之前和收到響應(yīng)數(shù)據(jù)之后做一些預(yù)處理。 Fly.js 是一個(gè)功能強(qiáng)大的輕量級(jí)的javascript http請(qǐng)求庫(kù),同時(shí)支持瀏覽器和node環(huán)境,通過(guò)適配器,它可以運(yùn)行在任何具有網(wǎng)絡(luò)能力的javascript運(yùn)行環(huán)境;同時(shí)fly.js有一些高級(jí)的玩法如全局ajax攔截、在web a...

    OpenDigg 評(píng)論0 收藏0
  • 一篇文章讓你學(xué)會(huì)如何選擇 JS HTTP 請(qǐng)求庫(kù)

    摘要:本文將帶你了解不同請(qǐng)求的原理,以及如何為項(xiàng)目選擇合適的請(qǐng)求庫(kù)。小程序年微信小程序上線,隨后各大平臺(tái)都推出自己的小程序。下面為目前較火的請(qǐng)求庫(kù)。支持微信小程序和瀏覽器是一個(gè)基于的請(qǐng)求庫(kù),可以用在微信小程序和瀏覽器中,對(duì)上述平臺(tái)都做了兼容。 以前前端提到網(wǎng)絡(luò)請(qǐng)求通常是指瀏覽器,但現(xiàn)在隨著 Node.js、小程序的出現(xiàn),網(wǎng)絡(luò)請(qǐng)求不再局限于瀏覽器。本文將帶你了解不同請(qǐng)求的原理,以及如何為項(xiàng)目選...

    Render 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<