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-server
是graphql 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
)
不过,您也可以通过网络向服务器本身发出请求——如果服务器位于同一主机上,您只需使用localhost
或127.0.0.1
。在这种情况下,您可以在 Node.js 脚本中使用 axios
、request
或任何其他 HTTP 客户端库。您也可以直接使用curl
在 bash 脚本或 curl 命令中发出请求。
【讨论】:
嗨,你会如何用这个来调用服务器?我想通过调用我的 apollo-server-express 后端的 github 操作调用突变,但我认为我不能将其发送到服务器的 IP?我可以看到请求到达我的服务器,但从未调用过突变。以上是关于Apollo GraphQL:从服务器调用突变?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Prisma 和 Apollo 调用多个 GraphQL 突变的正确方法是啥
React Native、GraphQL、Apollo - 如何创建批量插入突变