You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否向@graphql-tools/resolvers-composition的composeResolvers传入解析器数组?

问题解答

composeResolvers不支持直接传入解析器数组作为第一个参数,它只接受单个解析器对象,这就是你传数组时无法正常运行的核心原因。

解决方法很直接:先把多个解析器数组合并成单个对象,再传入composeResolvers。推荐用@graphql-tools/merge包中的mergeResolvers工具完成合并,它能深度合并嵌套的解析器结构(比如Query、Mutation下的字段),避免手动合并导致的覆盖问题。

修改后的代码示例:

import { mergeResolvers } from '@graphql-tools/merge';
import { composeResolvers } from '@graphql-tools/resolvers-composition';

const rootResolver = {};
const authorsResolvers = { /* 你的authors解析器内容 */ };
const booksResolvers = { /* 你的books解析器内容 */ };

// 合并解析器数组为单个对象
const mergedResolvers = mergeResolvers([rootResolver, authorsResolvers, booksResolvers]);

const isAuthenticated =
  () =>
  (next: any) =>
  async (root: any, args: any, context: any, info: any) => {
    if (!context.currentUser) {
      throw new Error("You are not authorized");
    }
    return next(root, args, context, info);
  };

const resolversComposition = {
  "*.*": [isAuthenticated()],
};

// 传入合并后的单个解析器对象
const composedResolvers = composeResolvers(mergedResolvers, resolversComposition);

export default composedResolvers;

如果不想额外引入依赖,也可以手动浅合并对象,但这种方式会覆盖重复的顶层键,仅适用于无嵌套冲突的简单解析器:

const mergedResolvers = Object.assign({}, rootResolver, authorsResolvers, booksResolvers);

内容的提问来源于stack exchange,提问作者bp123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 04:05:25