fly.js—Node下增強的API

wendux發表於2017-10-30

這是fly的第四篇篇文章,幫助您在微信小程式中使用fly。在閱讀本文之前,如果您還不瞭解 fly。 請先閱讀前兩篇文章:
第一篇: JS HTTP 請求終極解決方案 - fly.js
第二篇: Fly vs axios
第三篇:微信小程式中使用Fly 發起http請求

fly gibhub地址:github.com/wendux/fly

Fly 同時支援瀏覽器環境和 node 環境,在 node 下,由於沒有瀏覽器沙箱的限制,有訪問檔案系統的能力,為此fly 針對 node,專門做了功能提升,主要新增了檔案下載和上傳的便捷方法。

本文件所列 API 為 Fly 預設自帶的的 node adapter 支援,如果是您使用了其它第三方實現的 adapter,則不能保證這些 api 能正常工作。

Node adapter 使用了 request 庫,向作者致謝。

檔案下載

download (url, savePath, params = null, options={})

url 為下載地址,savePath為下載成功後檔案儲存的路徑,params 為請求引數,預設為null。返回一個Promise物件,一個簡單的示例如下:

var fly=require("flyio")
var log=console.log
//檔案下載
fly.download("http://localhost:8089/static/v.png", "./v.png")
    .then(d => {
        log(d.size)
    })
    .catch(log)複製程式碼

下載一張圖片,儲存到當前資料夾。成功後then收到的資料結構為:

{
  size:3000,//檔案大小,單位位元組
  path:"/user/wendux/xx/v.png" //下載檔案儲存在本地的絕對路徑
}複製程式碼

options

options 為請求配置,您可以設定自定義header等。詳情請參見 請求配置

底層

Fly下載檔案的原理是將選項 responseType 設為“stream”,然後fly在接收資料時就會將響應流傳遞給上層,然後再讀取、儲存,所以我們也可以用如下方式達到同樣的效果:

fly.get("http://localhost:8089/static/v.png",null,{responseType:"stream"})
  .then(d=>{
   //d.data為buffer物件
   fs.writeFile("v.png", d.data,(err)=>{
     //錯誤處理  
   })
  })複製程式碼

檔案上傳

upload(url,formData,options={})

formData是一個物件,和瀏覽器中FormData 相似。既可以包括普通欄位,也可以包括檔案。

var fly=require("flyio")

//上傳單個檔案
var formData = {
    file: fs.createReadStream('./v.png'), //檔案
}
fly.upload("http://localhost/upload", formData)
    .then(log).catch(log)

//可以包括多個欄位/檔案
var formData = {
    name:"v.png", //普通的欄位
    avatar: fs.createReadStream('./v.png'), //檔案
    resume: fs.createReadStream('./resume.docx'), //檔案
    attachments:[ //可以通過陣列
        fs.createReadStream('./file1.zip'),
        fs.createReadStream('./file2.zip')
    ]
}

fly.upload("http://localhost/upload", formData)
    .then(log).catch(log)複製程式碼

upload會將請求的 content-type 設為 “multipart/form-data”。

⚠️ 大多數http伺服器對單次請求上傳檔案的大小都有限制,不建議在一次請求中上傳多個檔案。

options

options 為請求配置,您可以設定自定義header等。詳情請參見 請求配置

$http

使用 Fly 的好處是封裝了request 庫,提供了和瀏覽器端一致的 Promise 介面。如果你想直接使用 request 庫原生的 api,可以通過 fly.$http 直接呼叫,$http 就是一個request物件,如:

//Stream
fly.$http('http://google.com/doodle.png')
  .pipe(fs.createWriteStream('doodle.png'))
//post請求
fly.$http.post('http://service.com/upload', {form:{key:'value'}})複製程式碼

詳細的文件請移步 Github request

建立新例項

Node下建立新例項時,要引用 src/node/index.js:

var Fly= require("./src/node")
var newFly=new Fly;複製程式碼

最後

再次貼出fly github地址,如果你喜歡,歡迎star,以使更多的人知道fly,感謝您的支援:github.com/wendux/fly

相關文章