Skip to content

Instantly share code, notes, and snippets.

@qiulang
Last active January 5, 2020 01:42
Show Gist options
  • Save qiulang/5430f8555cd32cae7511904e5516d2c9 to your computer and use it in GitHub Desktop.
Save qiulang/5430f8555cd32cae7511904e5516d2c9 to your computer and use it in GitHub Desktop.
为什么我们最终改用superagent 而不是用axsio

发HTTP请求的包

上一个项目经验,当时选了axios

5 Ways to Make HTTP Requests in Node.js

我们主要用 axios,因为它基于promise
上个项目只有一处用了 request, 因为它提供流处理

request('http://google.com/doodle.png').pipe(fs.createWriteStream('doodle.png'))

而且axios的流处理似乎还有问题,但我们没有仔细测试。

request的“问题”是 它目前"2.87.0" 依赖har-validator 5.0.3 依赖 ajv "^5.1.0" ajv5.1是很老版本;而且我们自己vue项目里有很多不同ajv版本

测试包用supertest带了superagent,但我们实际代码没用superagent

现在这个项目改superagent

axios 的star有5万多个,对比superagent只有1万,但对我们简单请求处理来说,其实他们应该是都差不多的。

像SO这个讨论Axios vs Superagent 说的 ”I’d base my decision on other factors, like which API you like better, and library size (for a browser-side application).“

我们想要发请求的retry机制,想不到从这个 axios issue 的讨论, axios作者不打算提供,所以已经两个npm module, axios-retry vs retry-axios 为了一个retry还要再引入一个额外的包实在没法接受。

相反 superagent提供了 retry

所以我们这次尝试改用superagent看,效果如何? 我总结在这个SO

2019 5.1再更新

如何 debounce axios 请求?发现难度不小,同时对promise理解又有加强

首先如何做,有这几个讨论。难点在于debounced call返回什么样的promise? 通过学习才知道,原来除了reject promise 还可以返回 cached promise和 pending forever的promise. pending forever的promise是一个新概念,也是"比较奇怪"的做法,但可行。

axios/axios#2118

https://stackoverflow.com/questions/55919714/my-implementation-of-debounce-axios-request-left-the-promise-in-pending-state-fo

https://stackoverflow.com/questions/55861970/what-will-happen-when-return-new-promiseresolve-reject-forgot-to-call

request 包进入维护模式 "The patterns at the core of request are out of date." axios 虽然有这样那样问题,好像已经变得越来越流行。

fetch vs axio

参见 https://www.sitepoint.com/axios-beginner-guide/

HTTP Requests Compared: Why Axios Is Better Than Node-Fetch (Automatic Transformations, More Secure, Can Handle Errors Better, Interceptor Support, And More Browser Friendly) https://medium.com/@jeffrey.allen.lewis/http-requests-compared-why-axios-is-better-than-node-fetch-more-secure-can-handle-errors-better-39fde869a4a6

但是拦截器的例子少

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment