Car*_*der 7 apollo apollo-server
如何获取上下文中的操作名称?在解析器中我可以通过参数得到它info。
import { ApolloServer } from 'apollo-server'
const server = new ApolloServer({
context: ({ req }) => {
// Get query/mutation operation name like getAllUsers
}
})
server.listen()
Run Code Online (Sandbox Code Playgroud)
使用我的评论中建议的技术,我能够检索操作名称。
假设您有以下查询:
query foo {
baz {
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
req.body有两个相关的键:
req.body.query以字符串格式保存整个查询,并保留空格和回车符。虽然您可以从该字符串中检索操作名称,但它需要一些字符串操作;即,将字符串转换为对象,然后获取根级键(可以是多个,以防您在单个查询中触发多个操作)。在上面的示例中,该键将包含以下字符串:'query foo {\n baz {\n id\n name\n }\n}'。
req.body.operationName保存您为查询指定的名称(如果您命名了它)。在上面的示例中,该键将保持'foo'(而不是 实际'baz'操作的名称)。然而,您可以决定通过根据查询包含的操作仔细命名查询来利用此功能(但是,如果您在一个查询中触发多个操作,则这将不起作用)。如果您没有命名查询,则此字段将保留。null
编辑:请参阅如何将 GraphQL 请求字符串解析为对象,了解将方法 1 中检索到的字符串转换为 JS 对象并检索实际操作名称的方法。
进一步考虑:
例如,方法 2 确实适合调试目的。假设您想记录特定查询的变量,您可以为其命名并执行以下操作:
query foo {
baz {
id
name
}
}
Run Code Online (Sandbox Code Playgroud)
但是,由于方法 2 依赖于客户端命名查询,因此它不能可靠地用于业务逻辑目的。无论客户端如何形成查询,只有方法 1 才能正确检索操作名称。
| 归档时间: |
|
| 查看次数: |
8739 次 |
| 最近记录: |