Graphql не может получить подтип

#express #graphql #resolver

Вопрос:

Я новичок в graphql и попытался реализовать базовый API с помощью express.

Но, когда я попытался запросить автора поста, они вернули значение null.

Мой тип «Сообщение» :

 const postType = `
    type Post {
        id: ID
        title: String
        content: String
        author: User
    }
`;

module.exports = postType
 

Мой тип «Пользователь» :

 const userType = `
    type User {
        id: ID
        name: String
        age: Int
    }
`;

module.exports = userType
 

Моя схема API Graphql :

 const schema = buildSchema(`
    ${userType}
    ${postType}
    type Query {
        users: [User!]!
        posts: [Post!]!
        user(id: Int): User!
        post(id: Int): Post!
    }
    type Mutation {
        createUser(user: createUserInput): User
    }
    schema {
        query: Query
        mutation: Mutation
    }
`);

module.exports = schema
 

Мой распознаватель «Post» и реализация типа с классом ES6 :

 const { getUser } = require('../actions/index').user
const { getPost, getPosts } = require('../actions/index').post

class Post {
    constructor(post) {
        Object.assign(this, post)
    }

    async author() {
        const data = await getUser(this.post.author)
        return data
    }
}


const postResolver = {
    posts: async () => {
        const data = await getPosts()
        return data.map(post => new Post(post))
    },
    post: async ({ id }) => new Post(await getPost(id))
}

module.exports = postResolver
 

My «User» resolver and type implementation with ES6 class :

 const { getUsers, getUser, createUser } = require('../actions/index').user

class User {
  constructor(user) {
    Object.assign(this, user)
  }
}

const userResolver = {
  users: async () => {
    const data = await getUsers()
    return data.map(user => new User(user))
  },
  user: async ({ id }) => new User(await getUser(id)),
}

module.exports = userResolver
 

Запрос и ответ клиента :

 query {
  post(id: 1) {
    id
    title
    author {
      id
    } 
  }
}

// response
{
  "data": {
    "post": {
      "id": "1",
      "title": "Post 1",
      "author": {
        "id": null
      }
    }
  }
}
 

Кто-нибудь может мне помочь, пожалуйста ? Спасибо!

Комментарии:

1. какой урок последовал за этим? Post.author() называется?, что возвращает? разве так не должно быть return new User( getUser... ? отсутствует User распознаватель классов/типов? и т. Д.

2. Извините, чтобы завершить: Я использовал этот учебник по YT youtube.com/watch?v=7b4HxdQuevk . Он реализует что-то очень похожее, в моем случае Post.author () не называется. Но фактически этот метод должен возвращать экземпляр пользователя.

3. следуйте лучшим/более полным учебным пособиям … «распознаватель полей» не вызывается — недостаточно быть методом класса (не связанным/подключенным к распознавателю типов/полей) … apollographql.com/docs/tutorial/resolvers

4. хорошо, спасибо, я посмотрю в этом направлении