【问题标题】:Using apollo in node - (no react)在节点中使用阿波罗 - (无反应)
【发布时间】:2021-02-02 07:07:00
【问题描述】:

我想用 apollo 做一些批量更新。我需要从节点启动批处理脚本。 例如node myscript.js

我不知道该怎么做。是否有一个简单的示例可以执行入门中描述的操作:https://www.apollographql.com/docs/react/get-started/ 但没有反应?

(我的代码在使用 react 时运行良好)

【问题讨论】:

    标签: apollo apollo-client


    【解决方案1】:

    这是从 node 使用 Apollo Client ver 3.x 与从 React 使用它的方法

    要从节点使用它,你必须从 @apollo/client/core 导入 React 你从 @apollo/client 导入 所以在节点中初始化可以是这样的:

    const STRAPIURI = "http://192.168.39.174:1337/graphql";
    import fetch from 'cross-fetch';
    import { ApolloClient, HttpLink, InMemoryCache } from '@apollo/client/core';
    
    const apolloClient = new ApolloClient({
      link: new HttpLink({
        uri: `${STRAPIURI}`, fetch,
        credentials: 'same-origin', // Additional fetch() options like `credentials` or `headers`
      }),
      cache: new InMemoryCache()
    });
    

    您还需要从同一位置导入 gql。

    import { gql } from '@apollo/client/core';
    

    【讨论】:

      【解决方案2】:

      首先你需要创建一个 apollo 客户端,非常类似于 react。

      检查下面的代码。

      
      import { ApolloClient } from 'apollo-client';
      import fetch from 'node-fetch';
      import { createHttpLink } from 'apollo-link-http';
      import { setContext } from 'apollo-link-context';
      import { InMemoryCache } from 'apollo-cache-inmemory';
      import config from './config';
      
      const httpLink = createHttpLink({
        uri: `${config.apiUrl}/graphql`,
        fetch,
      });
      
      const authLink = setContext(() => {
        const token = config.serverToken;
        return {
          headers: {
            Authorization: token,
          },
        };
      });
      
      const client = new ApolloClient({
        link: authLink.concat(httpLink),
        cache: new InMemoryCache(),
      });
      
      
      export default client;
      

      一旦客户端完成,你可以使用下面的代码来做一个突变

      import gql from 'graphql-tag';
      
      const mutation = gql(`mutation {
          CreateTodo(
            data: {
              task: "${task}"
            }
          ) {
            id
            task
          }
        }`);
      
      const response = await client.mutate({mutation});
      

      您也可以类似地使用它进行查询。我们正在使用节点获取来进行查询或变异。

      如果有帮助,请告诉我。

      【讨论】:

      • 据我了解,代码示例适用于 apollo 客户端版本 2.x
      • 据我了解,代码示例适用于 apollo 客户端版本 2.x,我想使用版本 3 的 apollo 客户端。这是我在反应代码中使用的版本,为简单起见,我想在节点部分使用相同的版本。在迁移页面apollographql.com/docs/react/migrating/… 上有一个部分“使用 Apollo Client without React”。那里说应该像这样导入: import { ApolloClient } from '@apollo/client/core';
      • @TerjeChristensen 是的,上面的代码是考虑到 apollo v2 编写的。我认为版本 3 需要进行一些更改,但我没有自己测试过。
      • 是的,v3 是另一回事。我在反应部分使用 V2.x,但改为 V3。这并不难。但是没有记录更改节点部分。如果你查看 v2 的 npm 页面npmjs.com/package/apollo-client 有一个部分“学习如何将 Apollo Client 与你最喜欢的框架一起使用”链接“Vanilla JS”指向一个不存在的页面。
      猜你喜欢
      • 2020-03-18
      • 2018-11-27
      • 2018-11-19
      • 2021-01-05
      • 2020-10-30
      • 2021-04-03
      • 2019-02-08
      • 1970-01-01
      • 2021-07-13
      相关资源
      最近更新 更多