当前位置: 首页 > 知识库问答 >
问题:

如何在GraphQL解析器中设置(数据库或其他)上下文?

寇桐
2023-03-14

GraphQL文档给出了一个解析器函数的示例,该函数接受一个名为“context”的参数。

他们不得不这么说-

上下文提供给每个解析器并保存重要上下文信息的值,例如当前登录的用户或对数据库的访问。

他们的代码示例如下所示-

Query: {
  human(obj, args, context) {
    return context.db.loadHumanByID(args.id).then(
      userData => new Human(userData)
    )
  }
}

在我看来,这似乎是一种非常自然的模式,希望在解析器函数中访问数据库,这正是我需要做的。

显然,此数据库上下文不会自动设置,因为GraphQL完全不了解您的特定数据持久性方法。

我的问题是,如何配置此上下文以提供特定的db接口?我在教程/文档中或任何地方都找不到这方面的提及。

共有2个答案

段干帅
2023-03-14

上下文是在设置服务器时定义的。我在文件里也看不到。

graphqlExpress(req => {
  return {
    schema: makeExecutableSchema({
      typeDefs: schema.ast,
      resolvers,
      logger
    }),
    context: {
      db: mongodb.MongoClient.connect(...)
    }
  };
})
戚阳曜
2023-03-14

调用graphql函数时,可以将上下文传递给graphql
此处指定。

以下是graphql函数的流定义:

graphql(
  schema: GraphQLSchema,
  requestString: string,
  rootValue?: ?any,
  contextValue?: ?any, // Arbitrary context
  variableValues?: ?{[key: string]: any},
  operationName?: ?string
): Promise<GraphQLResult>
 类似资料:
  • 问题内容: 我想读取存储在文件中的数据。我尚未决定要存储什么格式,但是我正在寻找一种易于解析的格式。最初我以为我会使用JSON,但似乎Java没有内置的JSON解析器。 存储的数据将是一堆记录,每个记录由一组字段组成。因此,将其存储在可以逐行读取的文本文件中还不够简单。这就是为什么我认为我需要类似JSON的原因。但是我不想添加外部库只是为了解析格式。有什么建议?我是Java新手。 问题答案: 尽管

  • 数据布局如下所示: 根据我的理解,我的解析器应该是这样的:第一个解析食谱,第二个解析食谱中的成分字段。它可以(根据我的理解)使用食谱提供的论点。在我的recipe对象中,id(int)引用了成分,所以这应该是参数(至少我是这么认为的)。 这些解析器像这样传递给应用程序: 如何在Express-GraphQL中为嵌套类型编写分离解析器?

  • 问题内容: 我是Python和Django的新手。 我正在使用PostgreSQL数据库引擎后端配置Django项目,但是每个数据库操作都出现错误。例如,当我跑步时,我得到: 有人可以告诉我发生了什么吗? 问题答案: 你需要安装psycopg2Python库。 安装 下载http://initd.org/psycopg/,然后将其安装在Python PATH下 下载后,轻松解压缩tarball并:

  • 在传统的web.xml类型配置中,您可以像这样配置上下文参数 web.xml 这是如何在Spring启动中实现的。我有一个需要参数的过滤器。 我使用的是,并包含了

  • 我想知道为什么我的论点似乎在我的GraphQL解析器内切换。我用的是快速图形。 一个解析器的示例: 我已经写了文件中出现的参数名称:http://graphql.org/learn/execution/ 但当我调试和检查对象时,args对象似乎是第一个,上下文是第二个,父/根是第三个。 家长: args: 上下文: 某些服务器代码: 我的根解析器: 模式:

  • MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、MongoDB 在“数据库”选项卡中,你可以设置连接到服务器时导航窗格显示哪些数据库。这设置不是强制的。若要设置自定义数据库设置,请勾选“使用自定义数据库列表”。然后,从“数据库”列勾选要显示的数据库。如果你想连接时 Navicat 自动打开数据库,勾选“自动打开”框。 添加一个隐藏的数据库到列表 点击“添加数据