我应该为新项目使用 'request' 模块吗?

Should I use the 'request' module for a new project?

'request' module has been a long-time standard for Node.js. They have recently deprecated 图书馆。

我正在开始一个新项目,并正在寻找建立网络的最佳解决方案。我开始使用 native 'https' module, but ran into problem after problem. Using the request module seemed to be easy and work just fine. There are also many other libraries 替换 request 模块。

一般来说,您应该尽可能避免使用已弃用的库。但这条经验法则适用于此吗?

用'request'模块开始新项目不好吗?如果有,新标准是什么?

请求并没有真正弃用。它不再考虑新功能或重大更改,但仍在维护中。在可预见的未来使用它是安全的,但使用它的想法有多好取决于开发人员。这里没有真正正确或错误的答案。

他们已经停止了对它的新工作,因为他们认为它使用的模式已经过时并且切换到现代模式将有效地请求一个全新的模块,而不是使成千上万的博客和 SO 答案无效通过进行大规模更新,他们决定停止,以便 space 出现一个有效使用新功能的新标准。到目前为止,还没有新的标准。

如果您喜欢 request,并且它使用的过时模式适合您的目的,那就去做吧。但新模式和功能的存在是有原因的,它们可能值得探索。

我个人不会使用 request() 库开始一个新项目,除非它具有我绝对需要的其他库没有的功能,或者除非我需要另一个依赖于 request() 的模块模块本身。

当我可以自由选择时,我使用 got() for new projects instead. Choosing from the list of alternatives 是个人决定,因此您只需要评估他们各自拥有的界面类型以及他们拥有的功能。对于我通常使用这种类型的库所做的事情,got() 看起来简单干净,从头开始构建并承诺,满足我的需求并且我使用它没有遇到任何问题。

Axios, node-fetch and superagent 的优势在于您可以在 node.js 和浏览器中使用相似的界面。所有这些都很受欢迎并被广泛使用。

我试过bent,但是没有点击它的编程界面。

我个人宁愿使用具有声明 objective 的库来随着语言的新发展、nodejs 库的新发展以及随着时间的推移添加新功能而不断发展,而不是使用这样的库它不会添加新功能。

我也喜欢使用一个库,该库具有从核心内置的 promise 支持,而不是仅作为包装器添加,因为我现在使用 promise 进行所有异步编程。


检查备选方案的一些其他资源:

Feature comparison chart(由got()的制作者编写)

Migrating to got() from request


而且,如果您想了解 request() 库进入维护模式的原因,请阅读 here

简而言之,它是一个古老的架构,有大量的功能粘在一边,但是因为有太多的模块依赖它,所以他们不能真正打破它们的 API 来修复或平滑事情出去。而且,由于它如此受欢迎,它阻碍了设计更简洁界面的竞争解决方案的成功。因此,决定让以更现代的方式设计的替代方案继续向前发展,request() 将进入维护模式以继续支持依赖它的其他模块,但不会尝试发展成更现代的界面。

request 的作者提到 request 是在最佳实践如此不同的情况下以旧方式编写的。他尝试用 更好的做法 重新创建一个类似的库,并制作了 bent.

我想说 request 的唯一问题不是底层代码,而是它的接口:回调属于石器时代,让你的代码变得丑陋。

我个人的建议是使用基于 RxJS 的解决方案:

  • RxJS 的前端代码捆绑 ajax 库(附带 rxjs),
  • RxJSx 的 request 后端库 (@rxjsx/request)。