在解析器之前修改 Ariadne 中的上下文

Posted

技术标签:

【中文标题】在解析器之前修改 Ariadne 中的上下文【英文标题】:Modify the context in Ariadne before the resolvers 【发布时间】:2020-07-09 00:04:16 【问题描述】:

context 的内容在传递给解析器函数之前如何修改?

【问题讨论】:

【参考方案1】:

查看特殊 Ariadne 类型 ContextValue 的文档。

GraphQL 类接受关键字参数context_value。它可以是任何类型,并将被设置为上下文。

如果传递了一个可调用对象,那么它将以request 作为参数调用。

所以:

    创建一个函数来构建所需的上下文

    def get_context_value(request):
        return 'request': request, 'test': "TEST"
    

    在 GraphQL 初始化时传递函数:

    app = GraphQL(
        schema,
        context_value=get_context_value,
        debug=True,
    )
    

解析器中的上下文值:

'request': <starlette.requests.Request object at 0x7fc363dbf370>, 'test': 'TEST'

【讨论】:

以上是关于在解析器之前修改 Ariadne 中的上下文的主要内容,如果未能解决你的问题,请参考以下文章

无法为阿波罗服务器中的解析器设置上下文

EL1057E: 没有在上下文中注册 bean 解析器来解析对 bean 的访问

GraphQL 解析器参数(根、参数、上下文)的错误顺序

GraphQL 订阅字段无法访问解析器的上下文

最好将 prisma 对象通过上下文传递给解析器还是直接使用它?

用于解析器 GraphQL 瑜伽的 TypeScript 类型(在上下文中使用 prisma2)