node.js - 在 Heroku 上开发时,使用 GraphQL 的 Shopify 应用程序无法运行

标签 node.js heroku graphql shopify apollo-client

我正在使用 Node.js 和 React 开发 Shopify 私有(private)应用程序,并使用 GraphQL api 发出请求。当我在本地运行它并使用 NGROK 发布它时一切正常,但是当我将代码推送到 Heroku 时,会发生错误。好像是ApolloClient有问题,但是想不通。

我这样设置 ApolloClient (基于本教程 https://developers.shopify.com/tutorials/build-a-shopify-app-with-node-and-react/fetch-data-with-apollo ):

import ApolloClient from 'apollo-boost';

const client = new ApolloClient({
    fetchOptions: {
        credentials: 'include'
    }
});

构建时,关于 fetch 的错误发生所以我修改了代码(基于 Using ApolloClient with node.js. "fetch is not found globally and no fetcher passed" ):
import ApolloClient from 'apollo-boost';
import { fetch } from 'node-fetch'

const client = new ApolloClient({
    fetch: fetch,
    fetchOptions: {
        credentials: 'include'
    }
});

构建成功,但我的 GraphQL 调用返回错误 graphql error only absolute urls are supported ,所以我尝试像这样修改代码:
import ApolloClient from 'apollo-boost';
import { fetch } from 'node-fetch'

const client = new ApolloClient({
    fetch: fetch,
    fetchOptions: {
        credentials: 'include'
    },
    uri: `https://${shopOrigin}/admin/api/2019-10/graphql.json`
});

现在发生的错误是 Network Error: Failed to Fetch有 CORS 问题。

谁能帮我解决这个问题?如果您需要更多信息,请告诉我。

最佳答案

Shopify 教程建议在服务器端使用 isomorphic-fetch。我尝试将它包含在 Next.js 端并且构建成功。

在我的 _app.js

require('isomorphic-fetch');
import ApolloClient from 'apollo-boost';

...

const client = new ApolloClient({
  fetchOptions: {
    credentials: 'include'
  },
});

关于node.js - 在 Heroku 上开发时,使用 GraphQL 的 Shopify 应用程序无法运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59576560/

相关文章:

node.js - 管道到标准输出和可写流

javascript - 安装和使用 React

reactjs - Apollo Client React 容器将创建的元素添加到分页元素列表中而无需重新获取

mongodb - 如何处理 GraphQL 架构定义中的连字符

python - 用于没有模型的对象的 Graphite 烯解析器

node.js - 使用 angular2 应用程序发送的 Express.js 接收 POST 数据

angularjs - Azure Web应用程序返回404(未找到)

ruby-on-rails - 使用 twitter-bootstrap 部署 Rails 应用程序

mysql - NodeJS + MySQL 从本地主机连接,但不是 heroku

ruby-on-rails - Heroku 与 Rails 5 错误 Gem::LoadError: 为数据库适配器指定 'postgresql'