request 已经被废弃了,有什么替代品吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FakerLeung
0.7D
V2EX    Node.js

request 已经被废弃了,有什么替代品吗?

  •  
  •   FakerLeung 2020-03-27 23:21:05 +08:00 17922 次点击
    这是一个创建于 2023 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/request/request#deprecated

    As of Feb 11th 2020, request is fully deprecated. No new changes are expected to land. In fact, none have landed for some time. For more information about why request is deprecated and possible alternatives refer to this issue. 

    不知道在 nodejs 中,有哪个比较好的替代品呢?

    33 条回复    2020-04-01 21:05:17 +08:00
    giuem
        1
    giuem  
       2020-03-27 23:31:08 +08:00
    GaoGeYang
        2
    GaoGeYang  
       2020-03-27 23:31:33 +08:00 via iPhone
    axios ?
    noe132
        3
    noe132  
       2020-03-27 23:45:08 +08:00
    axios
    FakerLeung
        4
    FakerLeung  
    OP
       2020-03-27 23:52:24 +08:00
    @giuem #1
    @GaoGeYang #2
    @noe132 #3
    顺便问下,nodejs 如何模拟 form-data 的上传图片啊。
    binux
        5
    binux  
       2020-03-27 23:53:45 +08:00 via Android   2
    node-fetch
    GaoGeYang
        6
    GaoGeYang  
       2020-03-27 23:57:55 +08:00 via iPhone
    axios 的话,设置好 headers 的 content type,data 用 qs.stringify 就行了
    noe132
        7
    noe132  
       2020-03-28 00:04:11 +08:00
    xcstream
        8
    xcstream  
       2020-03-28 00:19:42 +08:00
    我还在用 fetch 方便前后端之间复制粘贴
    xcstream
        9
    xcstream  
       2020-03-28 00:28:32 +08:00
    我觉得这种库不更新 没什么不正常
    noqwerty
        10
    noqwerty  
       2020-03-28 01:10:59 +08:00 via Android
    你发的链接里再往下翻翻就有他推荐的替代品。

    https://github.com/request/request/issues/3143
    seki
        11
    seki  
       2020-03-28 01:12:18 +08:00
    node-fetch got axios 都是不错的替代,就看 api 的个人喜好吧
    mogita
        12
    mogita  
       2020-03-28 02:38:14 +08:00
    今天看到一个新包 gretch,TS 写的 fetch 封装。
    rabbbit
        13
    rabbbit  
       2020-03-28 02:54:04 +08:00
    node-fetch 吧, axios proxy 有 bug
    WittBulter
        14
    WittBulter  
       2020-03-28 03:19:27 +08:00   12
    1. [r2]( https://github.com/mikeal/r2) 是比较早期的替代品,算是 request next 早期比较通用的产品,core 大约 [3.17kb]( https://cdn.unix.bio/?q=r2&npm=1)

    2. [node-fetch]( https://github.com/node-fetch/node-fetch) 是仿造 fetch API 写的 NodeJS HTTP 客户端,如果你对 fetch 比较熟悉考虑这个,有点是一直在更新,启动堆栈差不多 20k 。大家比较熟就不多说了。

    3. [axios]( https://github.com/axios/axios) 是浏览器与 NodeJS 兼容的,比较重,因为兼容了浏览器的代码。这部分代码在运行时也会进入堆栈,尽管不会执行,因为不管什么 module 都不能 tree shaking 编程式的分发的代码块。API 有些土里土气,属于简单易懂的状态型编程风格。

    4. [bent]( https://github.com/mikeal/bent) 也是浏览器与 NodeJS 兼容的,但比较小巧 (意味着功能没有那么多)。API 只有一个函数,但是目前没有基线测试不知道性能如何。

    5. [got]( https://github.com/sindresorhus/got) 专业的 NodeJS HTTP 客户端。非常非常非常大。亮点之一就是支持 `pagination` 与一些编程式的 hook,社区中有非常非常非常多的示例教你如何使用它,毕竟用的人多。开发者也是知名的开源狂魔 `sindresorhus` (他维护了 1000+ 的开源仓库),算是比较值得信赖吧。

    6. [superagent]( https://github.com/visionmedia/superagent) ,一个有意思的 HTTP 客户端库吧,用的链式 API 。也是兼容浏览器和 NodeJS 。优势是支持 HTTP2,具体可以看这个 [PR]( https://github.com/visionmedia/superagent/pull/1399)。早期是你们熟知的 TJ 一个人在写,现在已经是组织在维护。(体积也很大)


    总结一下,如果你喜欢小巧一些可以考虑 `node-fetch` 和 `bent`,需要功能比较强大就是 `got` 和 `superagent`。
    另外给你们强烈推荐一个适用于微服务的 http-client: [zeit-fetch]( https://github.com/zeit/fetch),支持 DNS 缓存、重试和 `keep-http-agent`,如果你正在写微服务,可以试一试。

    最后说一句题外话,现在 NodeJS 的 API 非常的友好,如果你只是一个简单的 request(特别是 `get` ) 不用库也就几行而已。
    WittBulter
        15
    WittBulter  
       2020-03-28 03:21:33 +08:00
    没法编辑... 真的难受
    yyfearth
        16
    yyfearth  
       2020-03-28 07:34:13 +08:00
    @rabbbit axios proxy 我记得最新版修好了
    kof21411
        17
    kof21411  
       2020-03-28 07:58:37 +08:00
    axios 比较好用
    Stlin
        18
    Stlin  
       2020-03-28 09:34:48 +08:00
    还以为是 Python 的 request,仔细一看 node 节点
    musi
        19
    musi  
       2020-03-28 10:05:59 +08:00 via iPhone
    @Stlin Python 的 requests 那么优雅,废弃就有点可惜了吧
    densuc
        20
    densuc  
       2020-03-28 11:00:28 +08:00
    @livid 好像黑底的代码展示有点难以阅读,是否可以优化一下
    ThirdFlame
        21
    ThirdFlame  
       2020-03-28 11:43:54 +08:00
    @densuc 不是夜间模式的问题,是楼主自己的 css 问题
    Livid
        22
    Livid  
    MOD
    PRO
       2020-03-28 11:59:21 +08:00
    @densuc Markdown 代码块里加上 txt 标识就会好一些。我帮楼主编辑了一下。

    ```txt
    ```
    VDimos
        23
    VDimos  
       2020-03-28 14:23:00 +08:00 via Android
    为啥要 deprecate ?
    JB18CM
        24
    JB18CM  
       2020-03-28 15:45:54 +08:00
    一直在用 axios
    xg4
        25
    xg4  
       2020-03-28 16:54:53 +08:00
    @VDimos
    https://github.com/request/request/issues/3142,作者有详细解释
    简而言之,历史包袱重,又不想后续版本产生断层。作者新写了个函数式的请求库 bent,支持 nodejs 和浏览器
    photon006
        26
    photon006  
       2020-03-28 23:11:48 +08:00
    superagent
    magicdawn
        27
    magicdawn  
       2020-04-01 20:42:27 +08:00
    我用 umi-request
    magicdawn
        28
    magicdawn  
       2020-04-01 20:48:27 +08:00
    我在前端 / node / react-native 项目中用 umi-request

    node.js 下载文件的需求可以用我的这个包 dl-vampire, 里面是 got (got 支持 progress 事件, 但是个人感觉 got 不是很好用, 习惯了 axios 那样, 于是切到了 umi-request)
    https://github.com/magicdawn/dl-vampire

    axios 有个 issue, axios.create 的 params 不会被 merge, v0.19.x 一直这样
    see https://github.com/axios/axios/issues/2190 (到现在已修复, 但是没有新版本)
    FakerLeung
        29
    FakerLeung  
    OP
       2020-04-01 20:59:56 +08:00
    @magicdawn #28
    要的是上传并非下载。
    magicdawn
        30
    magicdawn  
       2020-04-01 21:00:57 +08:00
    为啥一个开源项目说废弃就废弃, 是不是很不解, 很气愤~

    这里有一个解释
    https://github.com/airbnb/native-navigation/issues/145#issuecomment-328772095

    翻译一下就是
    https://s1.ax1x.com/2020/04/01/G8JdP0.png

    P.S react-native navigation 库, 一个看起来还算不错的, 也废弃了~~~
    magicdawn
        31
    magicdawn  
       2020-04-01 21:03:12 +08:00
    @FakerLeung 一般 node 常用的就是 API 请求+下载, 不必局限在一个, 我的观点其实是这个
    FakerLeung
        32
    FakerLeung  
    OP
       2020-04-01 21:04:26 +08:00
    @magicdawn #31

    我说的通过 node 将图片上传别的服务器去。。。
    magicdawn
        33
    magicdawn  
       2020-04-01 21:05:17 +08:00
    @FakerLeung ......
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     920 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 19:55 PVG 03:55 LAX 12:55 JFK 15:55
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86