美文网首页fly.jsWeb前端之路程序员
Node下通过fly.js发起http请求

Node下通过fly.js发起http请求

作者: lazydu | 来源:发表于2017-10-30 17:19 被阅读81次
fly.png

这是fly的第四篇篇文章,帮助您在微信小程序中使用fly。在阅读本文之前,如果您还不了解 fly。 请先阅读前两篇文章:
第一篇: JS HTTP 请求终极解决方案 - fly.js
第二篇: Fly vs axios
第三篇:微信小程序中使用Fly 发起http请求

fly gibhub地址:https://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

相关文章

  • Node下通过fly.js发起http请求

    这是fly的第四篇篇文章,帮助您在微信小程序中使用fly。在阅读本文之前,如果您还不了解 fly。 请先阅读前两篇...

  • JS HTTP请求终极解决方案 - fly.js

    Fly.js 是一个功能强大的轻量级的javascript http请求库,同时支持浏览器和node环境,通过适配...

  • 在node项目中对request的封装

    背景 因为我的node项目需要向其他服务发起请求,所以在网上找了找在node中用的最多的http库,通过搜索得知r...

  • 爬虫笔记(1):爬虫原理

    爬虫基本流程: 1) 发起请求: 通过HTTP库向目标站点发起请求,即发送request(请求可以包含额外的hea...

  • 网络爬虫基本原理——基于python语言

    什么是爬虫? 请求网站并提取数据的自动化程序 爬虫基本流程 ▌发起请求 通过HTTP库向目标站点发起请求,即发起一...

  • 怎样配置Feign使用HttpClient

    背景: 默认情况下,feign通过jdk中的HttpURLConnection向下游服务发起http请求(详见下图...

  • Nodejs发起http/TCP/UDP请求、串口通讯

    http 通过node自带的http模块可以进行http请求,但通常使用第三方库request进行http请求 T...

  • 通过C++编程发起HTTP请求

    前些天完成一个小项目,其主要功能是通过C++编程发起http请求,并对通讯信息加密。其中难点在于对方是java服务...

  • Day1爬虫原理

    爬虫基本流程 发起请求 通过HTTP库向目标站点发起请求,即发送一个Request,请求可以包含额外的header...

  • 爬虫基本原理

    1. 基本流程 1.1 发起请求 通过http库向目标站点发起请求,即发送一个Request,请求可以包含额外的信...

网友评论

    本文标题:Node下通过fly.js发起http请求

    本文链接:https://www.haomeiwen.com/subject/qnhmpxtx.html