Graphql 从服务器调用一个变种?

Graphql 从服务器调用一个变种?,graphql,apollo,apollo-server,Graphql,Apollo,Apollo Server,我需要从服务器上运行的cron作业调用一个变种,但公认的答案是没有办法做到这一点 : graphql服务器是graphql核心函数的网络包装器。如果你 不想通过网络使用它,您可以单独运行它: import scheme from './scheme'; const query = `{ me { name } }`; const result = graphql(scheme, query); console.log(result); 可以找到函数

我需要从服务器上运行的cron作业调用一个变种,但公认的答案是没有办法做到这一点

:

graphql服务器是graphql核心函数的网络包装器。如果你 不想通过网络使用它,您可以单独运行它:

   import scheme from './scheme';

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

const result = graphql(scheme, query); console.log(result); 
可以找到函数文档


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

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

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

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

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

export const getApolloServerClient = () =>

  new ApolloClient({

    ssrMode: true,

    cache: new InMemoryCache(),

    link: new SchemaLink({ schema }),

  });

小心这个方法。在浏览器中,每次导航或刷新页面时都会删除缓存。在服务器上,除非进程重新启动,否则不会删除缓存。这意味着您几乎总是希望通过对ApolloClient.query的调用使用仅网络策略来绕过缓存。另外值得注意的是,如果没有缓存,除了增加额外的开销之外,使用Apollo客户端并不会带来任何好处?我想通过github操作调用我的apollo server express后端,调用一个变种,但我想我不能将它发送到服务器的IP?我可以看到请求击中了我的服务器,但从未调用该变异。