标签: graphql-js

GraphQL字段是否支持基于传入参数的多态性?

我想定义以下查询

{
// return all individuals
individuals {
    id
  }
}

// return ONE individual by id
individuals(id:"123") {
   id
  }
}
Run Code Online (Sandbox Code Playgroud)

请注意,查询名称相同,只有参数不同.

今天,我发现的唯一解决方法是定义不同的查询名称.

如何定义多态查询?它甚至可能吗?

graphql graphql-js

10
推荐指数
1
解决办法
5724
查看次数

如何在graphql解析器中同时返回错误和数据?

我正在考虑实现同时包含错误和数据的 graphql 响应的方法。

是否可以在不创建包含error?

例如

MutationaddMembersToTeam(membersIds: [ID!]! teamId: ID!): [Member]将成员添加到某个团队。假设这种突变被称为有以下membersIds[1, 2, 3]

id为1和2的成员已经在团队中,所以必须抛出无法添加这些成员的错误,但应该添加id为3的成员,因为他不在团队中。

我正在考虑使用,formatResponse但似乎我无法在那里得到错误。

是否可以在不向返回类型添加错误字段的情况下解决此问题?

node.js apollo graphql-js

10
推荐指数
1
解决办法
7269
查看次数

如何让 GraphQL 枚举解析字符串

以前,我只是输入了input KeyInputas mode: String!,我希望将类型从 String 更改为!到自定义枚举。

我尝试过以下架构:

enum Mode= {
    test
    live
}

input KeyInput = {
    mode: Mode!
}

type Key {
    name,
    mode
}

type Query {
    Keys(input: KeyInput): [Key]
}
Run Code Online (Sandbox Code Playgroud)

我的查询如下所示:

query{
     Keys(input: {mode: "test"}){
        name
     }
}
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

      "message": "Expected type Mode!, found \"test\"; Did you mean the enum value test?"
Run Code Online (Sandbox Code Playgroud)

是否可以让枚举值解析字符串值?如果我从输入中删除引号,它将起作用。但是,我需要能够继续将模式解析为字符串。

javascript graphql graphql-js apollo-server apollo-client

10
推荐指数
1
解决办法
2万
查看次数

9
推荐指数
0
解决办法
979
查看次数

这个新的语法gql`string是什么?

const GET_DOGS = gql`
  {
    dogs {
      id
      breed
    }
  }
`;
Run Code Online (Sandbox Code Playgroud)

我从这里找到了这种新语法。

你能解释一下这种语法吗?在哪里可以找到详细信息?

javascript graphql-js

9
推荐指数
1
解决办法
469
查看次数

buildSchema和GraphQLSchema之间的显着差异?

两者之间是否存在显着差异?我对从运行时和启动性能到功能和工作流差异的任何事情感兴趣.文档在解释差异方面做得不好,何时应该使用其中一个.

两个版本中的示例:

buildSchema

const { graphql, buildSchema } = require('graphql');

const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

const root = { hello: () => 'Hello world!' };

graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});
Run Code Online (Sandbox Code Playgroud)

GraphQLSchema

const { graphql, GraphQLSchema, GraphQLObjectType, GraphQLString } = require('graphql');

const schema = new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'Query',
    fields: () => ({
      hello: {
        type: GraphQLString,
        resolve: () => 'Hello world!'
      }
    })
  })
});

graphql(schema, '{ hello …
Run Code Online (Sandbox Code Playgroud)

graphql graphql-js

9
推荐指数
1
解决办法
1607
查看次数

如何在 Apollo Server 中将类型定义和解析器拆分为单独的文件

索引.ts:

  const server = new ApolloServer({
    typeDefs,
    resolvers,
    context: ({ req, res }: any) => ({ req, res })
  });
Run Code Online (Sandbox Code Playgroud)

用户架构.ts

export const typeDefs = gql`
  scalar TimeStamp
  type Query {
    getUser(id: Int!): User
  }
  type Mutation {
    addUser(
      name: String!
      email: String
      age: Int
      register_at: TimeStamp!
    ): Boolean!
  }
  type User {
    id: Int!
    name: String!
    email: String!
    age: Int!
    register_at: TimeStamp!
  }
`;
Run Code Online (Sandbox Code Playgroud)

UserResolver.ts

export const resolvers = {
  TimeStamp: timeStamp,
  Query: {
    getUser: async (_: any, args: …
Run Code Online (Sandbox Code Playgroud)

typescript graphql graphql-js apollo-server

9
推荐指数
1
解决办法
3584
查看次数

graphql 使用先前突变返回结果的多重突变?

我知道突变是连续的,所以对我来说,如果突变 1 创建一个实体并返回一个 id,那么突变 2 应该有权访问该 id,这对我来说是有意义的。但是我在网上没有看到任何示例,并且似乎无法让它工作。我看到人们说你需要在路由的解析函数中处理这个问题,但如果我可以在查询中得到这个,这似乎是额外的不必要的代码。

例如,我有以下帐户,其中帐户属于客户端,因此在创建之前需要 clientId。然而这不起作用......

mutation createClientAndAccount($account: AccountInput, $client: ClientInput){
      createClient(client: $client){ clientId }
      createAccount(account: $account, clientId: USE_CLIENT_ID_FROM_ABOVE) { ... } 
    }
Run Code Online (Sandbox Code Playgroud)

我也尝试过嵌套突变,但也没有太多运气......

我想做的事情可能吗?的解析函数是否会createAccount从 中返回数据createClient

graphql graphql-js

8
推荐指数
1
解决办法
3120
查看次数

使用 GraphQL 检索包含具有不同模式的对象数组的对象

我正在尝试编写一个查询来检索一个对象,该对象的属性linkedCards包含具有不同模式的对象数组。

我有 3 种不同的模式(内置Contentful):

CardA 示例:

{
    id: 42,
    productName: 'Laptop',
    price: 999
}
Run Code Online (Sandbox Code Playgroud)

CardB 示例:

{
    id: 999,
    title: 'Buy our refurbished Laptops today!'
}
Run Code Online (Sandbox Code Playgroud)

CardC 示例:

{
    id: 100,
    linkedCards: [
        {
            id: 42,
            productName: 'Laptop',
            price: 999
        },
        {
            id: 999,
            title: 'Buy our refurbished Laptops today!'
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

询问:

allCardC() {
    nodes {
        linkedCards {
            id
            title
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试运行以下 GraphQL 查询时,我得到 "Cannot query field "title" on type "CardACardBUnion". Did …

contentful graphql graphql-js gatsby

8
推荐指数
2
解决办法
3817
查看次数

如何在 GraphQL 查询变量中使用数组

我想在 GraphQL 查询变量中使用数组,以便我可以通过 Gatsby 的单个查询获取多个产品的数据,但目前我收到错误。

我的 graphQL 查询如下所示:

query ($id: [String!]) {
  shopifyProduct(handle: {eq: $id}) {
    handle
    id
    title
    handle
    productType
    shopifyId
  }
}
Run Code Online (Sandbox Code Playgroud)

我的查询变量如下所示:

{
  "id": ["liner-jacket", "pocket-t-shirt"]
}
Run Code Online (Sandbox Code Playgroud)

所需的响应将是(类似于):

{
  "data": {
    "shopifyProduct": {
      "handle": "liner-jacket",
      "id": "Shopify__Product__hopbjidjoqjndadnawdawda123123=",
      "title": "Liner Jacket",
      "productType": "jacket",
      "shopifyId": "hopbjidjoqjndadnawdawda123123="
    },
    "shopifyProduct": {
      "handle": "pocket-t-shirt",
      "id": "Shopify__Product__iajwdoiajdoadjwaowda4023123=",
      "title": "Pocket T-Shirt",
      "productType": "t-shirt",
      "shopifyId": "iajwdoiajdoadjwaowda4023123="
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

graphql graphql-js gatsby

8
推荐指数
1
解决办法
1万
查看次数