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
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里
如何 debounce axios 请求?发现难度不小,同时对promise理解又有加强
首先如何做,有这几个讨论。难点在于debounced call返回什么样的promise? 通过学习才知道,原来除了reject promise 还可以返回 cached promise和 pending forever的promise. pending forever的promise是一个新概念,也是"比较奇怪"的做法,但可行。
request 包进入维护模式 "The patterns at the core of request
are out of date." axios 虽然有这样那样问题,好像已经变得越来越流行。
参见 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
但是拦截器的例子少