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

如何将GraphQLInputObject整合到动态加载的JavaScript GraphQL Schema中?

整合JS定义的GraphQL输入类型到现有Schema

有两种常用方案可以把你用JavaScript创建的UserQueryInput输入类型整合到现有Schema中,根据你的场景选择:

方案一:将输入类型定义移至SDL文件(推荐)

这是GraphQL的最佳实践,类型定义集中在.graphql文件中更易维护,且无需修改现有_loadSchema函数的核心逻辑:

  1. 在你的../graphql/typedefs/目录下的任意.graphql文件(比如新建inputs.graphql)中添加输入类型的SDL定义:
input UserQueryInput {
  where: String
  select: String
}
  1. 在定义user查询的.graphql文件中,更新查询定义以引用这个输入类型:
type Query {
  user(input: UserQueryInput): User # 这里User是你已定义的用户类型
}
  1. 保持原_loadSchema函数不变,loadSchema会自动加载所有.graphql文件中的类型定义,无需额外处理。

方案二:直接在JS中合并输入类型到Schema

如果必须保留JavaScript定义的输入类型,可以通过以下步骤整合:

  1. 导入GraphQL的printType工具,将JS定义的输入类型转换为SDL字符串:
const { printType } = require('graphql');
// 确保UserQueryInput已被正确导入到当前文件
  1. 修改_loadSchema函数,合并文件加载的类型定义与JS生成的SDL:
async function _loadSchema() {
    // 加载从文件读取的类型定义
    const typeDefsFromFiles = await loadSchema(path.join(__dirname, '../graphql/typedefs/*.graphql'), {
        loaders: [new GraphQLFileLoader()]
    });
    
    // 将JS输入类型转换为SDL字符串
    const userQueryInputSDL = printType(UserQueryInput);
    
    // 合并所有类型定义
    const mergedTypeDefs = [typeDefsFromFiles, userQueryInputSDL];

    const resolvers = await loadFiles(path.join(__dirname, '../graphql/resolvers'));

    // 使用合并后的类型定义创建可执行Schema
    const schema = makeExecutableSchema({ typeDefs: mergedTypeDefs, resolvers });

    return applyMiddleware(schema, shield);
}
  1. 确保你的user查询定义(无论是在SDL文件还是JS中)已经引用了UserQueryInput作为输入参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:26:10