ReferenceError: fetch 未在 NodeJs 中定义
ReferenceError: fetch is not defined in NodeJs
“ReferenceError: fetch is not defined”发生在fetch()
不支持它的环境中使用该方法时——最常见的是 NodeJs。为了解决这个错误,安装并导入node-fetch
包,它
fetch()
在 NodeJs 运行时提供了一个兼容的 API。
要解决“ReferenceError: fetch is not defined”,安装并导入
node-fetch
包。
如果您的项目没有package.json
文件,请在项目的根目录中创建一个:
壳
# 👇️ only run this if you don't have package.json file yet npm init -y
现在安装node-fetch
库。
壳
npm install node-fetch
现在您可以像在浏览器中使用
fetch()方法一样导入和使用该模块。
索引.js
import fetch from 'node-fetch'; async function getUser() { try { const response = await fetch('https://randomuser.me/api/'); if (!response.ok) { throw new Error(`Error! status: ${response.status}`); } const result = await response.json(); return result; } catch (err) { console.log(err); } } console.log(await getUser());
在撰写本文时,要在 NodeJs 项目中使用 ES6 模块导入和导出,您必须在文件中将type
属性设置为
:module
package.json
包.json
{ "type": "module", // ... 👇️ rest }
如果您使用 TypeScript,则不必为包安装类型,因为它们默认包含在内。
node-fetch
如果我运行我的 NodeJs 脚本,我会通过调用 API 获得结果。
该
node-fetch
软件包的最新版本仅与导入/导出的 ES6 模块语法兼容。如果您使用较旧的 NodeJs 版本,请安装该node-fetch
软件包的版本 2。ReferenceError fetch 未在 NodeJs(旧版本)中定义
仅当您使用较旧的 NodeJs 版本并希望使用require
语法而不是import/export
.
狂欢
npm install node-fetch@2
我们安装了该node-fetch
软件包的版本 2。
确保您没有在
文件中type
设置属性。module
package.json
fetch
现在您可以使用旧require
功能导入包。
索引.js
// 👇️ Using older require syntax const fetch = require('node-fetch'); async function getUser() { try { const response = await fetch('https://randomuser.me/api/'); if (!response.ok) { throw new Error(`Error! status: ${response.status}`); } const result = await response.json(); return result; } catch (err) { console.log(err); } }
我们必须安装包的版本2
才能node-fetch
在
require
我们的 NodeJs 应用程序中使用语法。
最好与客户端和服务器端代码之间的导入保持一致。但是,如果您必须支持旧版本的 NodeJs,这种方法就可以完成工作。