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

如何将现有GraphQLSchema对象传入Apollo的makeExecutableSchema函数

在GraphQL中集成graphql-iso-date标量类型到makeExecutableSchema

我来帮你搞定这个问题!要把graphql-iso-date提供的标量类型(比如GraphQLDate)和你自定义的类型定义、解析器配合使用,只需要两步就能实现:

步骤1:在类型定义中声明标量

GraphQL需要明确知道你用到的Date是一个自定义标量类型,所以得先在typeDefs里添加标量声明:

import { GraphQLDate, GraphQLTime, GraphQLDateTime } from 'graphql-iso-date';
let typeDefs = [];
// 先声明要使用的标量类型
typeDefs.push(`
scalar Date
scalar Time
scalar DateTime
`);
// 再添加你的自定义业务类型
typeDefs.push(`
type MyType {
  date: Date
}
`);

步骤2:在解析器中映射标量实现

接下来要把你声明的标量名称和graphql-iso-date提供的具体实现关联起来,只需要在resolvers对象里添加对应的键值对:

let resolvers = {
  // 把标量类型绑定到对应的实现上
  Date: GraphQLDate,
  // 如果需要用到Time或DateTime,也一起加上
  // Time: GraphQLTime,
  // DateTime: GraphQLDateTime,
  Query: () => { /* ... */ },
};

完整可用的示例代码

把这些整合起来,最终的代码如下:

import { GraphQLDate, GraphQLTime, GraphQLDateTime } from 'graphql-iso-date';
import { makeExecutableSchema } from '@graphql-tools/schema';

let typeDefs = [];
typeDefs.push(`
scalar Date
scalar Time
scalar DateTime
`);
typeDefs.push(`
type MyType {
  date: Date
  time: Time
  dateTime: DateTime
}

type Query {
  getSampleData: MyType
}
`);

let resolvers = {
  Date: GraphQLDate,
  Time: GraphQLTime,
  DateTime: GraphQLDateTime,
  Query: {
    getSampleData: () => {
      // 这里可以直接返回JS Date对象,graphql-iso-date会自动处理序列化和解析
      return {
        date: new Date(),
        time: new Date(),
        dateTime: new Date()
      };
    }
  },
};

const schema = makeExecutableSchema({ typeDefs, resolvers });

简单解释下原理

  • 标量声明是告诉GraphQL:Date不是它内置的类型,是一个你自定义的标量,需要用特定逻辑处理数据的序列化(JS对象转GraphQL响应格式)和解析(客户端传入的字符串转JS对象)。
  • 解析器里的映射则是把这个标量名称和graphql-iso-date已经封装好的解析/序列化逻辑绑定,这样GraphQL就知道该怎么处理这个类型的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:19:37