首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不变冲突:未全局找到fetch,也没有传递取取器,以修复环境的fetch。

不变冲突:未全局找到fetch,也没有传递取取器,以修复环境的fetch。
EN

Stack Overflow用户
提问于 2022-08-25 11:25:17
回答 1查看 123关注 0票数 0

我正在尝试使用AWS处理程序运行一个NodeJS应用程序。我的package.json非常简单:

代码语言:javascript
复制
...
  "dependencies": {
    "aws-appsync": "^4.1.7",
    "aws-sdk": "^2.1202.0",
    "graphql-tag": "^2.12.6"
  }

当我试图运行任何我得到的东西:

代码语言:javascript
复制
Invariant Violation: 
fetch is not found globally and no fetcher passed, to fix pass a fetch for
your environment like https://www.npmjs.com/package/node-fetch.

For example:
import fetch from 'node-fetch';
import { createHttpLink } from 'apollo-link-http';

const link = createHttpLink({ uri: '/graphql', fetch: fetch });
    at new InvariantError (/Users/jamesdaniels/Code/node_modules/ts-invariant/lib/invariant.js:16:28)
    at Object.exports.checkFetcher (/Users/jamesdaniels/Code/node_modules/apollo-link-http-common/lib/index.js:65:15)
    at Object.createHttpLink (/Users/jamesdaniels/Code/node_modules/apollo-link-http/lib/bundle.umd.js:47:30)
    at Object.exports.createAppSyncLink (/Users/jamesdaniels/Code/node_modules/aws-appsync/lib/client.js:144:201)
    at new AWSAppSyncClient (/Users/jamesdaniels/Code/node_modules/aws-appsync/lib/client.js:214:72)
    at Object.<anonymous> (/Users/jamesdaniels/Code/utils/appsync.js:16:23)

该错误似乎与aws-appsync包有关。只有当我将该错误介绍到我的应用程序时,才会发生错误:

代码语言:javascript
复制
const AWS = require("aws-sdk") // Works fine
const AUTH_TYPE = require("aws-appsync").AUTH_TYPE;
const AWSAppSyncClient = require("aws-appsync").default;

// GraphQL client config
const appSyncClientConfig = {
    url: "https://xxxxxxxxxxxxxxxxx.appsync-api.eu-west-2.amazonaws.com/graphql",
    region: "eu-west-2",
    auth: {
      type: AUTH_TYPE.AWS_IAM,
      credentials: AWS.config.credentials,
    },
    disableOffline: true,
  };

// Initialise the AppSync client
const appSyncClient = new AWSAppSyncClient(appSyncClientConfig);

从依赖模块aws-appsync > apollo-link-http > apollo-link-http-common引发错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-25 14:20:12

结果是错误信息告诉了我我需要知道的事情。aws-appsync不是为后端环境设计的。它适用于前端环境,在这些环境中,fetch可以在全球范围内使用。在后端,我们需要为自己的fetch创建自己的全局变量,如果我们希望它对我们安装的任何节点包可用。

解决方案是下载node-fetch,然后按照“提供全局访问”部分中的说明:

提供全局访问

要使用fetch()而不导入它,可以在节点中修补全局对象:

代码语言:javascript
复制
// fetch-polyfill.js
import fetch, {
  Blob,
  blobFrom,
  blobFromSync,
  File,
  fileFrom,
  fileFromSync,
  FormData,
  Headers,
  Request,
  Response,
} from 'node-fetch'

if (!globalThis.fetch) {
  globalThis.fetch = fetch
  globalThis.Headers = Headers
  globalThis.Request = Request
  globalThis.Response = Response
}

// index.js
import './fetch-polyfill'

// ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73486635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档