【问题标题】:Apollo GraphQL: Call a Mutation from the Server?Apollo GraphQL:从服务器调用突变?
【发布时间】:2020-09-11 08:33:29
【问题描述】:

我需要从服务器上运行的 cron 作业中调用一个突变。 I found this SO post,但接受的答案说没有办法。

Then I found this on GitHub, from 2017:

graphql-servergraphql core 函数的网络包装器。如果你 不想通过网络使用它,你可以单独运行它:

import scheme from './scheme';

const query = `{
  me {
    name   
  }
}`;

const result = graphql(scheme, query);
console.log(result); 

函数文档可以找到here

看起来不错!这是 2020 年的最佳实践方法吗?

【问题讨论】:

    标签: graphql apollo apollo-server


    【解决方案1】:

    我也刚刚发现了这种方法。可以直接在服务器上创建 Apollo 客户端。

    export const getApolloServerClient = () =>
    
      new ApolloClient({
    
        ssrMode: true,
    
        cache: new InMemoryCache(),
    
        link: new SchemaLink({ schema }),
    
      });
    

    【讨论】:

    • 谨慎使用这种方法。在浏览器中,每次您离开或刷新页面时,缓存都会被删除。在服务器上,在进程重新启动之前不会删除缓存。这意味着您几乎总是希望通过使用network-only 策略来调用ApolloClient.query 来绕过缓存。还值得注意的是,如果没有缓存,除了增加开销之外,您并没有真正从使用 ApolloClient 中获得任何好处。
    【解决方案2】:

    是的,如果您可以访问 GraphQL 服务器使用的 GraphQLSchema 对象,那么最简单的方法就是使用 graphql 模块导出的 graphql 函数。请注意,您应该等待返回的 Promise 才能访问结果:

    async function run () {
      const { data, errors } = await graphql(
        schema, 
        query,
        rootValue,
        context,
        variables
      )
    }
    

    不过,您也可以通过网络向服务器本身发出请求——如果服务器位于同一主机上,您只需使用localhost127.0.0.1。在这种情况下,您可以在 Node.js 脚本中使用 axiosrequest 或任何其他 HTTP 客户端库。您也可以直接使用curl 在 bash 脚本或 curl 命令中发出请求。

    【讨论】:

    • 嗨,你会如何用这个来调用服务器?我想通过调用我的 apollo-server-express 后端的 github 操作调用突变,但我认为我不能将其发送到服务器的 IP?我可以看到请求到达我的服务器,但从未调用过突变。
    猜你喜欢
    • 1970-01-01
    • 2020-02-14
    • 2019-06-22
    • 2017-10-25
    • 2021-05-09
    • 2020-04-24
    • 2019-06-30
    • 2019-05-18
    • 2019-11-27
    相关资源
    最近更新 更多