Nodejs 老司机比较一下 httpclient 库吧

Nodejs 老司机比较一下 httpclient 库吧

Node 刚开始看,觉着很简单,昨天写了一個小程序,发现 node 下面的 httpclient 可不是一般的多,而且开发都很活跃, github star 都很高。

老司机说一下他们之间的大体比较吧? fetch, request, superagent, axios 。

28 回复

以前用 needle ,自从用了 promise 后,就一直用 node-fetch 了。像 request 太庞大了,大多数功能都没机会用到


fetch ,配合 Promise 和 async/await 使用。 browser 端千万不要用 request

就用过 request

  • node-fetch: 略简陋,主要目的是为了同构和浏览器公用代码
    - request: 历史悠久,功能全, promise 还需要引入 request-promise , API 是一点点叠加上去的,没有经过完整的设计
    - superagent: 和 request 有同样问题, promise 、 log 这种基础功能都需要引入三方库
    - axios: 优点是可以实现同构, API 设计好,非常适合对接 RESTFul 服务,缺点是用例和资料偏少

    我们生产最终用的 request

request 用惯了,顺便 promise 一直用的 bluebird 也用惯了

npm init -y
npm i -S request bluebird cheerio

各种小脚本的默认起手式

顺便数据复杂的话再来个 lodash

isomorphic-fetch

isomorphic-fetch +1

谢谢各位,不能一一回复。

谢谢,很有帮助。

现在 es6 都挺流行了, lodash 用处不大了吧

superagent 和 axios 都是同构的, axios 功能全一点,前端用 fetch ,后端 axios

superagent 与 axios 还是不同的,我试了一下,将 axios 换成 superagent 之后, response 内容不同,代码得该。看了一下发现还是更喜欢 axios 一点。

其实前后端都用 fetch 也可以,这样的话会更统一一点吧。

ES6 并没有取代多少 lodash 的东西吧

fetch 是标准, axios 语法糖多,我用 axios

axios +1

有机会试试 got

request ! request ! request !
主要是旧代码用着懒得换了……

axios 功能比 superagent 多,例如截取器,不过 response 内容倒是 axios 不怎么规范,大家都是叫 body 就它一个叫 data 。

fetch 的话前端是用 fetch ,后端不是 fetch 而是 node-fetch ,并不是同构,需要打包两份

从 superagent 切到了 request-promise, 因为这个 https://github.com/visionmedia/superagent/issues/1069
我建议 node 端都用 request, 一个很简单的 trick, 自动读取 http_proxy / https_proxy 环境变量…等等

现在 GitHub 都有 superagent owner / superagent contributor blabla 了…

谢谢老司机,很有帮助

为啥 es6 就不需要 lodash 了

koa-request 作者封装的 request 。从来没用过其他的了~

在Node.js环境中,有多个HTTP客户端库可供选择,它们各有千秋。以下是对几个常用HTTP客户端库的简要比较,包括http模块、tank-http-client.js以及通用的第三方库选择考量。

1. Node.js内置的http模块

Node.js自带的http模块提供了基础的HTTP客户端功能,通过http.requesthttp.get方法发起请求。

const http = require('http');

http.get('http://example.com', (res) => {
  console.log(`状态码: ${res.statusCode}`);

  res.on('data', (chunk) => {
    console.log(`响应体: ${chunk}`);
  });
}).on('error', (e) => {
  console.error(`问题: ${e.message}`);
});

2. tank-http-client.js

tank-http-client.js是一个专为Node.js设计的HTTP客户端库,优化了链式调用,使代码更简洁。

const tank = require('tank-http-client.js');

tank.get('https://api.example.com/data')
  .query({ key: 'value' })
  .send()
  .then(response => { console.log(response.body); })
  .catch(error => { console.error(error); });

3. 第三方库选择

在选择第三方HTTP客户端库时,除了考虑功能全面性,还需评估其性能、稳定性、文档质量和社区支持。例如,axiosgot也是Node.js社区中广受欢迎的HTTP客户端库。

综上所述,选择哪个HTTP客户端库取决于具体需求,包括请求的复杂性、对性能的要求以及个人或团队的偏好。

回到顶部