Apollo GraphQL:从服务器调用突变?

Posted

技术标签:

【中文标题】Apollo GraphQL:从服务器调用突变?【英文标题】:Apollo GraphQL: Call a Mutation from the Server? 【发布时间】: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 年的最佳实践方法吗?

【问题讨论】:

【参考方案1】:

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

export const getApolloServerClient = () =>

  new ApolloClient(

    s-s-rMode: 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?我可以看到请求到达我的服务器,但从未调用过突变。

以上是关于Apollo GraphQL:从服务器调用突变?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo GraphQL:未在突变子字段上调用解析器

使用 Prisma 和 Apollo 调用多个 GraphQL 突变的正确方法是啥

React Native、GraphQL、Apollo - 如何创建批量插入突变

Apollo GraphQL 嵌套突变

Vue-Apollo GraphQL Mutation 未正确调用

Apollo/graphQL:如何将乐观 UI 用于嵌套反应组件的突变?