GraphQL 文档给出了一个解析器函数的例子,它接受一个名为“context”的参数。
他们不得不这样说——
context提供给每个解析器并保存重要上下文信息的值,例如当前登录的用户或对数据库的访问。
他们的代码示例如下所示 -
Query: {
human(obj, args, context) {
return context.db.loadHumanByID(args.id).then(
userData => new Human(userData)
)
}
}
Run Code Online (Sandbox Code Playgroud)
在我看来,这是一种非常自然的模式,希望在解析器函数中访问数据库,不出所料,这正是我需要做的。
显然,这个数据库上下文不是自动设置的,因为 GraphQL 完全不知道您的特定数据持久性方式。
我的问题是,如何配置此上下文以提供特定的数据库接口?我在教程/文档中或任何地方都找不到提到这一点。
您可以在调用函数时将上下文传递给 graphql graphql。此处
指定。
以下是该函数的流程定义graphql:
graphql(
schema: GraphQLSchema,
requestString: string,
rootValue?: ?any,
contextValue?: ?any, // Arbitrary context
variableValues?: ?{[key: string]: any},
operationName?: ?string
): Promise<GraphQLResult>
Run Code Online (Sandbox Code Playgroud)
上下文是在您设置服务器时定义的。我也无法在文档中看到它。
graphqlExpress(req => {
return {
schema: makeExecutableSchema({
typeDefs: schema.ast,
resolvers,
logger
}),
context: {
db: mongodb.MongoClient.connect(...)
}
};
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2752 次 |
| 最近记录: |