Как передать параметры в дочернее свойство в GraphQL - PullRequest
0 голосов
/ 02 июня 2018

Я довольно новичок в 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!
}

Моя схема.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.log("parent", parent);
    console.log("args", args);
    console.log("info", info);
    console.log("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
    }
  }
}

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

1 Ответ

0 голосов
/ 02 июня 2018

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

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 вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...