首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试将架构与apollo服务器缝合时,获取无法读取未定义的属性'args‘

尝试将架构与apollo服务器缝合时,获取无法读取未定义的属性'args‘
EN

Stack Overflow用户
提问于 2019-02-17 02:29:03
回答 1查看 1.2K关注 0票数 1

似乎有一些类似的问题,但没有一个是在我得到错误的地方,也没有一个带有未定义的'args‘。

我已经让它工作了,可以拥有多个其他graphql apis并合并它们。只是合并它们进行得很好,但当我尝试缝合时,我得到了如下所示的错误:

代码语言:javascript
复制
"errors": [
{
  "message": "Cannot read property 'args' of undefined",
  "locations": [
    {
      "line": 9,
      "column": 9
    }
  ],
  "path": [
    "flows",
    "edges",
    0,
    "node",
    "sourceAddresses"
  ],
  "extensions": {
    "code": "INTERNAL_SERVER_ERROR",
    "exception": {
      "stacktrace": [
        "TypeError: Cannot read property 'args' of undefined",
        "    at /opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:103:15",
        "    at Array.forEach (<anonymous>)",
        "    at /opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:95:39",
        "    at Array.map (<anonymous>)",
        "    at addVariablesToRootField (/opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:66:36)",
        "    at AddArgumentsAsVariablesTransform.transformRequest (/opt/node_modules/graphql-tools/src/transforms/AddArgumentsAsVariables.ts:31:11)",
        "    at /opt/node_modules/graphql-tools/src/transforms/transforms.ts:24:21",
        "    at Array.reduce (<anonymous>)",
        "    at Object.applyRequestTransforms (/opt/node_modules/graphql-tools/src/transforms/transforms.ts:21:21)",
        "    at /opt/node_modules/graphql-tools/src/stitching/delegateToSchema.ts:90:28"
      ]
    }
  }
}

]

我有一个从3个GraphQL Api中检索模式的schemaRetriever服务,现在我正试着让1针工作,所以现在的代码并不是很“好”。

这是一段代码,我试着把它缝合起来:

代码语言:javascript
复制
    const aSchema = await this.schemaRetrieverService.retrieveASchema();
const housesSchema = await this.schemaRetrieverService.retrieveHousesSchema();
const addressSchema = await this.schemaRetrieverService.retrieveAddressSchema();

return mergeSchemas({
  schemas: [
    aSchema,
    housesSchema,
    addressSchema,
        `
    extend type Houses {
      houseAddresses: Addresses
    }

    extend type Addresses {
      houses: Houses
    }

    type Query {
      addressByHouseId(id: ID!): Addresses
    }
  `
  ],
  resolvers: {
    Houses: {
      houseAddresses: {
        fragment: `... on Houses { id }`,
        resolve(house, args, context, info) {
          return info.mergeInfo.delegateToSchema({
            schema: addressSchema,
            operation: 'query',
            fieldName: 'addressByHouseId',
            args: {
              id: house.houseAddress,
            },
            context,
            info,
          });
        },
      },
    },
  },
});

我已经验证了'house.houseAddress‘是否包含所需的正确ID,尽管我在args变量中放入了一个有效的ID,但我仍然得到相同的错误。我是不是漏掉了什么小东西?还是很大?如果有人能给我指点,我将不胜感激。

非常感谢提前,如果有任何信息丢失,请让我知道,我将尝试添加所有必要的信息。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-18 17:11:40

我已经找到了这个问题的答案,因为分享就是关心,我将在这里回答我自己的问题。因为我是新手,所以我不知道后台发生了什么。对于那些可能面临同样问题的人。

因为我太专注于缝合了,所以我忘记了在我的微服务中有一些函数可以用来检索模式。在缝合时,赋予缝合的字段名应该是可以在实体上调用的函数。

这意味着fieldName:'addressByHouseId‘引用了一个应该存在于房屋类型上的函数。

您可以在微服务级别的实体上添加此函数,也可以像我在本例中所做的那样,引用(默认情况下使用api-platform生成)house(Id)函数。现在有了一个可用于缝合的实际实现。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54726301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档