我在 apollo 服务器中定义了下面的 graphql 模式,作为 Apollo 联合路由器后面的子图。
extend schema @link(url: "https://specs.apollo.dev/federation/v2.0", import: ["@key", "@shareable"])
scalar DateTime @shareable
type _Service {
sdl: String
}
# This "Book" type defines the queryable fields for every book in our data source.
type Book {
title: String
author: String
date: DateTime
}
它有一个自定义标量类型
DateTime
。我将其标记为 @sharable
,以便使该类型在其他子图中可见。但是当我尝试启动这个 Apollo 服务器时,我收到以下错误:
GraphQLError: Directive "@shareable" may not be used on SCALAR.
它说
@shareable
不可共享。如何使自定义类型在其他子图中可用?
你需要注册标量,给它一个上下文:
extend schema @link(url: "https://my-whatever-spec--the-address-does-not.matter/json/v1.0", import: ["JSON"])
scalar JSON
type User {
details: JSON @shareable
}
在你的其他子图中,你做同样的
@link
事情。