GraphQL 通过将其作为解析参数之一传递来查询数据库
Posted
技术标签:
【中文标题】GraphQL 通过将其作为解析参数之一传递来查询数据库【英文标题】:GraphQL querying database by passing it as one of resolve arguments 【发布时间】:2017-06-06 13:04:46 【问题描述】:我有兴趣学习 GraphQL,这样我就可以构建真正的全栈应用程序。
我正在尝试在架构内的解析函数中查询我的 mongodb。我收到错误:
“消息”:“mongodb.getCollection 不是函数”
这很简单,我的 mongodb 参数没有 getCollection 函数,问题是我不知道为什么。我正在使用 mongodb、graphqlhttp、express-graphql。
这是我的代码:
在我的 index.js 文件中:
const graphql = express();
graphql.use('/', graphQLHTTP(async () => (
graphiql: true,
pretty: true,
schema,
context:
mongodb: await mongodb
)));
在我的架构文件中,这是我的解析 sn-p:
resolve: async(source, category , mongodb ) =>
return await
stories: mongodb.getCollection('stories').find()
;
我现在完全卡住了,你们知道我的代码有什么问题吗?
【问题讨论】:
我觉得问题在于您在上下文中设置mongodb
的方式。为什么在mongodb之前需要await
?如果您可以在将 mongodb
设置在上下文中之前共享代码来初始化它,那就太好了。
【参考方案1】:
尝试使用:
resolve: (obj, args, ctx) =>
return mongodb.getCollection('stories').find()
不用说 - 来自数据库的结果应该与 GraphQLObject 类型匹配,例如:
new GraphQLList(storyType)
【讨论】:
这对我 atm 不起作用,我仍在试图找出可能是什么问题。【参考方案2】:首先,当您使用.find()
函数时,通常可以使用上述提到的GraphQLList,因为它从数据库中获取所有内容,我建议您使用您的console.log( ); 更频繁。
根据我自己对 graphQL 的了解,resolve 函数接受两个参数,即父数据和您的参数。
查看本教程link 以更好地学习如何使用 GQL 查询 mongodb。
【讨论】:
以上是关于GraphQL 通过将其作为解析参数之一传递来查询数据库的主要内容,如果未能解决你的问题,请参考以下文章
GraphQL.js Node/Express:如何将对象作为 GraphQL 查询参数传递