当前位置: 首页 > 知识库问答 >
问题:

如何为GraphQL使用阵列架构类型

李胤
2023-03-14

第一次尝试GraphQL,我希望一种模式类型能够访问另一种模式类型中的对象数组。在连接到MongoDB之前,我使用本地数据和lodash对此进行测试。关于我的尝试,我得到了一些错误。我知道我很接近了。任何援助将不胜感激。

以下是我的最新尝试。我使用 express-graphql 访问了 GraphQLList,并使用 GraphQLID 访问了第二个模式。

schema.js

var projects = [
{
    name: "Title 1",
    subtitle: "Subtitle 1",
    summary: "Lorem ipsum....",
    languageId: ["4", "2"],
    id: "1"
},
...

var languages = [
{ name: "Javascript", id: "1" },
{ name: "HTML", id: "2" },
{ name: "CSS", id: "3" },
{ name: "Python", id: "4" },
]
...

const ProjectType = new GraphQLObjectType({
name: 'Project',
fields: () => ({
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    subtitle: { type: GraphQLString },
    summary: { type: GraphQLString },
    languages: {
        type: new GraphQLList(GraphQLID),
        resolve(parent, args) {
            console.log(parent)
            return _.find(languages, { id: parent.languageId })
        }
    }
})
});

const LanguageType = new GraphQLObjectType({
name: 'Language',
fields: () => ({
    id: { type: GraphQLID },
    name: { type: GraphQLString },
     })
});

//Root Queries
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
    project: {
        type: ProjectType,
        args: { id: { type: GraphQLID } },
        resolve(parent, args) {

           return _.find(projects, { id: args.id });
        }
    },
    language: {
        type: LanguageType,
        args: { id: { type: GraphQLID } },
        resolve(parent, args) {

            return _.find(languages, { id: args.id })
          }
        }
    }
});

其目的是在Graphiql中列出该项目中使用的语言列表,看起来像这样。。。

    {
    "data": {
    "project": {
      "name": "Project 1"
      languages{
          names{
             "Python"
             "HTML" 
              }
            }
         }
        }
       }

相反,我得到了以下内容...

    {
  "errors": [
    {
      "message": "Syntax Error: Expected Name, found }",
      "locations": [
        {
          "line": 7,
          "column": 7
        }
      ]
    }
  ]
}

我重新格式化了硬编码一系列语言的决心,这是可行的,但它不起作用。如有任何建议,我们将不胜感激。感谢大家抽出时间。

共有2个答案

佴博实
2023-03-14

我有一个关于我的标签的老项目的问题。最后我通过试一试找到了u可以用这个标签:{ type:graphql list(graphql string)},

微生高谊
2023-03-14

我不知道你想问什么。但是为了返回嵌套在< code >项目中的< code >语言,您应该更改< code >语言字段的返回类型。

类似的东西:

const ProjectType = new GraphQLObjectType({
    name: 'Project',
    fields: () => ({
        id: {type: GraphQLID},
        name: {type: GraphQLString},
        subtitle: {type: GraphQLString},
        summary: {type: GraphQLString},
        languages: {

            // change this type to LanguageType
            type: new GraphQLList(LanguageType),
            resolve(parent, args) {
                // No need to lodash here
                return languages.filter((language) => {
                    return  parent.languageId.includes(language.id)
                })
            }
        }
    })
});
 类似资料:
  • 我试图了解GraphQL最适合在微服务架构中使用的地方。 关于只有一个GraphQL模式作为API网关,将请求代理给目标微服务并强制它们的响应,存在一些争论。微服务仍然会使用REST/Trift协议进行通信。 另一种方法是拥有多个GraphQL模式,每个微服务一个。有一个较小的API网关服务器,它将请求路由到目标微服务,并带有请求的所有信息+GraphQL查询。 第一种方法 将1个GraphQL模

  • 我有一个数据帧,其中有一列是JSON字符串 并且希望使用模式解析< code>from_json的< code>json_str列 正如人们所看到的,第二行不符合,因此即使我在StructField中将传递到它也是空的。对于我的管道来说,如果存在不符合所定义架构的数据,则会以某种方式引发警报,但我不确定在Pyspark中执行此操作的最佳方法。真正的数据有很多很多的键,其中一些是嵌套的,所以用某种形

  • 问题内容: 我在Django中有一些REST API端点,我想对Graphene使用相同的身份验证。该文档不提供任何指导。 问题答案: 例如,如果在API视图中使用,则可以将端点添加到以这种方式装饰的GraphQLView中: urls.py: 请注意,我们添加了一个新的端点,并保留了GraphiQL工具使用的原始端点。 然后,您应该在GraphQL客户端中设置标头并指向端点。 更新:请参阅此Gi

  • 问题内容: 我想在Django中使用postgreSQL模式,该怎么做? 问题答案: 我一直在使用: 过去没有意识到仅适用于只读操作。当你尝试添加新记录时,它将失败,因为该序列类似于“ schema.tablename” _column_id_seq。 到目前为止还可以。谢谢。

  • 我正在创建一个这样的表, 但我想增加一列。在原始SQL中看起来是这样的: 如何将其添加到迁移中?我还需要在上面创建一个索引。

  • 虽然使用GraphiQL效果很好,但我的老板要求我实现一个用户界面,用户可以通过诸如checkbox、map relationships之类的UI元素检查呈现给他们的元素,并获取数据,这样做将为用户生成GraphiQL输入,调用API并将结果返回给用户。 所以,基本上这涉及到两代人。从GraphQL模式生成用户界面,并从用户的选择生成GraphQL输入查询。 我搜索了一下,但没有找到任何工具已经做