152

fly.js—Node下增强的API

 6 years ago
source link: https://juejin.im/post/59f6ec44f265da43252895be
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

fly.js—Node下增强的API

2017年10月30日 09:11 ·  阅读 4753
fly.js—Node下增强的API

这是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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK