Node.js使用graphql-compose时如何获取所有Query、Mutation与Subscription列表
解决方案
你可以直接通过graphql-compose提供的原生API获取所有根操作字段,不需要解析请求query,具体实现如下:
场景1:直接从schemaComposer实例获取(推荐)
schemaComposer上挂载的Query、Mutation、Subscription都是ObjectTypeComposer实例,调用getFieldNames()方法就能直接拿到该类型下所有已注册的字段名:
// 生成你需要的对象格式 const operationMap = { Query: schemaComposer.Query.getFieldNames(), Mutation: schemaComposer.Mutation.getFieldNames(), Subscription: schemaComposer.Subscription.getFieldNames() } // 如果需要数组格式,直接遍历转换即可 const operationList = Object.entries(operationMap).flatMap(([opType, opFields]) => { return opFields.map(field => ({ operator: field, name: opType })) })
场景2:已生成标准GraphQLSchema实例
如果你已经调用schemaComposer.buildSchema()生成了标准GraphQL Schema实例,可以用graphql官方API获取:
const schema = schemaComposer.buildSchema() const operationMap = { Query: Object.keys(schema.getQueryType()?.getFields() || {}), Mutation: Object.keys(schema.getMutationType()?.getFields() || {}), Subscription: Object.keys(schema.getSubscriptionType()?.getFields() || {}) }
注:代码中的可选链和空值 fallback 是为了兼容未定义对应根操作的场景,避免运行时报错。
内容的提问来源于stack exchange,提问作者Peter Jack
相关产品推荐
相关产品推荐

