如何使用 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-tools
的makeExecutableSchema
方法生成的。这意味着我需要以某种方式手动调用架构上的查询。
基本上,我需要这样的东西:
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
。请注意,您首先需要 parse
和 validate
查询。
我建议查看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 模式?
graphql-tools 突变解析器的参数不是 v > 0.8.0 中的对象?
使用 graphql-tools 打印远程模式时出现 getDirectives 错误