#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. хорошо, спасибо, я посмотрю в этом направлении