如何使用 graphql-tools 调用查询

Posted

技术标签:

【中文标题】如何使用 graphql-tools 调用查询【英文标题】:How to invoke a query using graphql-tools 【发布时间】:2020-12-25 05:09:42 【问题描述】:

我想构建一个 GraphQL API。但是,我不想使用 express 或 connect,这使我无法使用 express-graphql。我的模式是使用来自graphql-toolsmakeExecutableSchema 方法生成的。这意味着我需要以某种方式手动调用架构上的查询。

基本上,我需要这样的东西:

const  makeExecutableSchema, magicFunction /*This should invoke the query*/  = require('graphql-tools');

const typeDefs = `
type Query 
  hello: String

`;
const resolvers = 
  Query: () => 'hello world!'

const schema = makeExecutableSchema(
  typeDefs,
  resolvers
);

// Run the query:
const query = `
  hello
`;

console.log('returned:', magicFunction(query, schema));

另外,如果请求来自浏览器,我需要显示 GraphiQL。

这样的事情可能吗?

【问题讨论】:

"我不想使用 express 或 connect" - 你还在用什么? @Bergi 我正在构建自己的框架,eon.js,我想在其中构建 grahpql 支持。在底层,eon 使用核心 http 模块。 【参考方案1】:

您要查找的魔术函数名为execute。请注意,您首先需要 parsevalidate 查询。

我建议查看the source of graphql-express 以了解它的作用。

【讨论】:

如果我没看错的话,这个函数来自 graphql-js... 它可以与 graphql-tools 生成的模式一起使用吗? 有没有办法在可能的情况下显示graphql? @Jake 是的。不幸的是,我在任何地方都找不到明确说明,但graphql-js 是所有(大多数?)JS graphql 实现所依赖的核心库 - graphql-tools 只是提供用于操作graphql-js 的数据结构的辅助函数和depends on it。 通过查看您发送给我的express-graphql 源,我看到处理graphql 查询涉及到很多额外的代码......没有更直接的方法可以做到这一点? @Jake 其中大部分是 express-graphql 用作挂钩的可配置 noop。如果你放弃所有关于选项、漂亮打印、格式、图形和扩展的东西,那么剩下的就不多了。

以上是关于如何使用 graphql-tools 调用查询的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 graphql-tools 使用或解析枚举类型?

如何使用 graphql-tools 从两个源位置加载 GraphQL 模式?

graphql-tools 突变解析器的参数不是 v > 0.8.0 中的对象?

使用 graphql-tools 打印远程模式时出现 getDirectives 错误

无法从 graphql-tools 导入 IResolvers

自定义针对 graphql-tools 中的类型定义的模拟数据