问题描述
我是阿波罗服务器的新手,我非常努力地理解如何使远程模式成为一个巨大的方案,我能够加入模式并且现在可以查询数据,但是,我似乎无法链接/resolve 类型,我的两个微服务使用相同的类型名称来表示那些在任何地方都相同的类型,其中 pk
在所有类型中都很常见,只有一个只有 pk
,另一个有一些额外的字段,
我的商店架构看起来像这样
type UserType implements Node {
id: ID!
shops: [ShopType]
pk: Int
}
在这种情况下,真正重要的是 pk
,因为它应该与我的身份验证架构相结合,看起来像这样
type UserType implements Node {
id: ID!
username: String
email: String
pk: Int
}
有这么多其他字段,我希望能够在 appolo 服务器中加入两者的数据字段,因为这是我合并两个模式的地方,以便我查询时
{
shops {
shopOwner {
username
email
}
}
}
那么即使 username
和 email
不在第一个架构中,它也可以通过身份验证架构中的 pk
解析这些字段
我用过这样的东西
const createNewSchema = async () => {
const schemas = await createRemoteExecutableSchemas();
return mergeSchemas({
schemas,});
};
加入我的模式,那么我如何才能让两者按照我的意愿一起工作?预先非常感谢
解决方法
我能够让它工作,我使用了 stitchschemas
,它看起来像这样
const createNewSchema = async () => {
const schemas = await createRemoteExecutableSchemas();
return stitchSchemas({
subschemas: [
{
schema: schemas['shop'],merge: {
UserType: {
entryPoints: [
{
fieldName: 'shopOwnerById',selectionSet: '{ pk }',args: originalObject => ({ pk: originalObject.pk }),},{
fieldName: 'shopById',}
]
},{
schema: schemas['auth'],merge: {
UserType: {
entryPoints: [
{
fieldName: 'userById',]
}
}
}
],mergeTypes: true,});
};
就我而言,只是为了不混淆我将 schemas
设为字典的任何人,其中每个字典都是由它所链接的 API 命名的。还必须确保我在各自的端点中对所有 fieldName
进行了查询。感谢您查看这里的 guid https://www.graphql-tools.com/docs/stitch-type-merging 提供了很多帮助