Преобразователи GraphQL разрешают только первый тип

так что я работаю над своим проектом, и я, кажется, зашел в тупик со своими способностями.

Я работаю над бэкэндом GraphQL, который должен извлекать некоторые данные из базы данных MySQL. У меня уже работают преобразователи, поэтому я могу получить всех пользователей и т. д., но я не могу получить вложенные типы. Например:

query {
  ways {
    id
    distance
    duration
    purpose
    User {
      id
      dob
    }
  }
}

Это возвращает только все пути из моей базы данных, но пользователь возвращает null

схема.ts

export const typeDefs= gql`
    schema {
        query: Query
    }

    type Query {
        ways: [Way]
        users: [User]
        getUser(id: String!): User
        getWay(id: String!):Way
    }
    type Way{
        id:String
        distance:Float
        duration:Float
        stages:[Stage]
        purpose:String
        User:User
    }
    type User{
        id:String
        firstname:String
        lastname:String
        sex:String
        dob:String
        annualTicket:Boolean
        Ways:[Way]
    }

резольвер.ts

export const resolvers = {
  Query: {
    ways: async(parent, args, context, info) => {
      console.log("ways")
      const answer=await getAllWays();
      return answer;
    },
    users: async(parent, args, context, info) => {
      console.log("users")
      const answer=await getAllUser();
      return answer;

    },
    getUser: async(parent, args, context, info) =>{
      console.log("getUser")
      const answer=await getUserPerID(args.id);
      return answer;
    },
    getWay:async(parent, args, context, info) =>{
      console.log("getWay")
      const answer=await getWayPerID(args.id);
      return answer;
    }
  },
  User:async(parent, args, context, info) =>{
    console.log("User: id="+args.id)
    ways: User => getWaysPerUserID(args.id)
  },
  Way:async(parent, args, context, info) => {
    console.log("Way: id="+parent.userID)
    user: Ways => getUserPerID(parent.userID)
  }

Я ожидаю, что результат будет включать пользователя и его данные, используя вышеупомянутый запрос.

Любые советы очень ценятся.


person DDaniel    schedule 17.04.2019    source источник


Ответы (1)


Только поля, а не типы, могут иметь преобразователи. Каждый ключ в вашем объекте resolvers должен сопоставляться с другим объектом, а не с функцией. Итак, вместо

Way:async(parent, args, context, info) => {
  console.log("Way: id="+parent.userID)
  user: Ways => getUserPerID(parent.userID)
}

Вам нужно написать:

Way: {
  // We capitalize the field name User because that's what it is in your schema
  User: (parent) => getUserPerID(parent.userID)
}
person Daniel Rearden    schedule 17.04.2019
comment
не могли бы вы помочь мне здесь - person Ashok; 17.04.2019