fly.js—Node下加強的API

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

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

Fly 同時支持瀏覽器環境和 node 環境,在 node 下,因爲沒有瀏覽器沙箱的限制,有訪問文件系統的能力,爲此fly 針對 node,專門作了功能提高,主要添加了文件下載和上傳的便捷方法。node

本文檔所列 API 爲 Fly 默認自帶的的 node adapter 支持,若是是您使用了其它第三方實現的 adapter,則不能保證這些 api 能正常工做。ios

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

文件下載

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

url 爲下載地址,savePath爲下載成功後文件保存的路徑,params 爲請求參數,默認爲null。返回一個Promise對象,一個簡單的示例以下:axios

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等。詳情請參見 請求配置api

底層

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

相關文章
相關標籤/搜索