node环境,是否可以使用fetch函数?如何使用fetch?
发布于 作者:苏南大叔 来源:程序如此灵动~

在前面一篇文章中,苏南大叔讲述了fetch
函数的实验结果。但是,大家都知道,网页里面的js
环境和node
里面的js
环境,是同根同源的。这个fetch
函数是否在node
环境下面还是可以使用的呢?在本文中,苏南大叔就来针对这个话题进行一下探讨。

本文测试环境:node@14.16.0
,node-fetch@2.6.1
,win10
。特别强调的一点是:本文中的观点,很有可能会随着技术的发展而发生失效,并不代表永久观点。(苏南大叔琢磨着:node
应该官方集成fetch
函数...你觉得呢?)
update 220715,目前最新的node-feth@3
系列,并不适合本文,会报错。解决方案请参考:
https://newsn.net/say/node-fetch-2.html
node
没有天生的fetch
苏南大叔通过下面的方式进行测试:
可以得知:截至到发稿,本文所测试的node@14.16.0
环境下,是没有fetch
函数的。

当然,这个结论可能也是可以推断的,因为在看fetch
函数的资料的时候,就会看到资料里面一直在强调fetch
是挂载在window
对象上面的。所以,没有window
概念的node
环境,应该按理说也是不支持fetch
函数的。
第三方提供node-fetch
当然,node
官方没有fetch
函数,并不代表第三方没有,下面苏南大叔就实验一下第三方的fetch
函数。当然这个fetch
的module
是需要下载安装的。截至到发稿,这款node-fetch
版本是:2.6.1
。
官方文档:
使用的话,当然需要先npm i
了,具体的不详细展开了。
再次测试fetch
函数,就可以得出存在fetch
函数了。
注意:这里执行的是普通的使用require
的.js
文件。package.json
中的type
不能是module
。
这里输出的结果是:
参考官方文档:
node-fetch 的 get
先测试node-fetch
的get
:

node-fetch 的 post
再测试node-fetch
的post
:

node-fetch 的 then
当然,也是可以写成.then
形式的(官方文档里面没写),测试也通过了。代码如下:
但是,苏南大叔觉得还是await
比.then
这种更靠谱一些,毕竟node
环境里面,似乎也不需要啥ajax
的概念吧,就是简单的得到数据吧。展开讨论的话,这里事儿就多了。

小插曲
插曲一,官方说最新的版本是3.x
,但是苏南大叔安装得到的确是2.6.1
。暂时来说,不伤大雅。
可能的命令如下:

插曲二,官方文档里面的代码范例,使用的是await
,可没有放在async
里面,会报错的。给新人挖坑是不?报错信息如下:await is only valid in async function
。

相关链接
- https://newsn.net/say/js-fetch.html
- https://newsn.net/say/node-await.html
- https://newsn.net/say/npm-version.html
总结
按理说这个node-fetch
是要和官方的window.fetch
看齐的。所以,如果大家在使用中,发现了不一致的地方,可以向官方提交issue
。在看文档测试的过程中,苏南大叔有点被官方忽悠的感觉,好吧,这是各种官方文档的通病...暂时不吐槽了...
更多苏南大叔解说的node
函数,请参考苏南大叔的博客:


