Как передать параметры дочернему свойству в GraphQL

Я новичок в GraphQL, скоро стану большим поклонником :)

Но что-то мне непонятно. Я использую Prisma с привязками и GraphQL-Yoga с привязками Prisma.

Я не знаю, как передавать параметры с моего сервера graphQL в дополнительные свойства. Не знаю, понятно ли это, но я покажу это с помощью кода, надеюсь, это проще :)

Это мои типы

type User {
  id: ID! @unique
  name: String!
  posts: [Post!]!
}

type Post {
  id: ID! @unique
  title: String!
  content: String!
  published: Boolean! @default(value: "false")
  author: User!
}

Моя schema.graphql

type Query {
  hello: String
  posts(searchString: String): [Post]
  users(searchString: String, searchPostsTitle: String): [User]
  me(id: ID): User
}

и мой распознаватель пользователей:

import { Context } from "../../utils";

export const user = {
  hello: () => "world",
  users: (parent, args, ctx: Context, info) => {
    return ctx.db.query.users(
      {
        where: {
          OR: [
            {
              name_contains: args.searchString
            },
            {
              posts_some: { title_contains: args.searchPostsTitle }
            }
          ]
        }
      },
      info
    );
  },
  me: (parent, args, ctx: Context, info) => {
    console.info("parent", parent);
    console.info("args", args);
    console.info("info", info);
    console.info("end_________________");
    return ctx.db.query.user({ where: { id: args.id } }, info);
  }
};

и преобразователь моих сообщений

import { Context } from "../../utils";

export const post = {
  posts: (parent, args, ctx: Context, info) => {
    return ctx.db.query.posts(
      {
        where: {
          OR: [
            {
              title_contains: args.searchString
            },
            {
              content_contains: args.searchString
            }
          ]
        }
      },
      info
    );
  }
};

а сейчас :)

Находясь на игровой площадке GraphQL в моем сервисе prisma, я могу делать следующее:

{
  user(where: {id: "cjhrx5kaplbu50b751a3at99d"}) {
    id
    name
    posts(first: 1, after: "cjhweuosv5nsq0b75yc18wb2v") {
      id
      title
      content
    }
  }
}

но я не могу сделать это на сервере, если я сделаю что-то подобное ... я получаю сообщение об ошибке:

"error": "Response not successful: Received status code 400"

вот что я пытаюсь:

{
  me(id: "cjhrx5kaplbu50b751a3at99d") {
    id
    name
    posts(first:1) {
      id
      title
      content
    }
  }
}

кто-нибудь знает, как я мог это сделать?

хорошо .. я решил это :) иногда нужно просто подумать, когда писать и объяснять здесь .. я оставлю вопрос другим людям, у которых есть такая же проблема ..

damir 02.06.2018 17:01
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
1
1
840
1

Ответы 1

поскольку у меня есть пользовательский тип пользователя, сообщения не имеют таких параметров, как сгенерированный. Либо я использую сгенерированный, либо изменяю его так:

type User {
  id: ID!
  name: String!
  posts(where: PostWhereInput, orderBy: PostOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [Post!]
}

ИЗМЕНИТЬ 2018 4 июня

# import Post from './generated/prisma.graphql'

type Query {
  hello: String
  posts(searchString: String): [Post]
  users(searchString: String, where: UserWhereInput, orderBy: UserOrderByInput, skip: Int, after: String, before: String, first: Int, last: Int): [User]
  me(id: ID): User
}

type Mutation {
  createUser(name: String!): User
  createPost(
    title: String!
    content: String!
    published: Boolean!
    userId: ID!
  ): Post
}

Я скопировал параметры из prisma.graphql вручную.

Можете ли вы также поделиться новым schema.graphql? Вам нужно импортировать типы из новых аргументов :)

marktani 03.06.2018 17:28

Да! Обратите внимание, что UserWhereInput, UserOrderByInput и User импортируются «транзитивно» из оператора import Post в первом залоге :)

marktani 04.06.2018 14:27

Другие вопросы по теме