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 查询参数语法

在 GraphQL 中将参数从根传递到子查询

GraphQL.js Node/Express:如何将对象作为 GraphQL 查询参数传递

如何使用 Strapi 在 GraphQL 中添加自定义查询?

如何在GraphQL中添加自定义查询?

apollo graphql 传递参数来解析函数