Схемы сшивания в graphql не разрешаются и возвращают значение null?

Недавно я начал использовать apollo / graphql для разработки api для моего проекта и mongodb в качестве моей базы данных. Я следил за этим руководством на веб-сайте apollo https://www.apollographql.com/docs/graphql-tools/schema-stitching.html для разработки объединенной схемы, чтобы я мог писать запросы, соединяющие разные схемы. В руководстве говорится о создании исполняемых схем на основе ваших индивидуальных схем.

//ExecutableSchemas     
const postSchema  = makeExecutableSchema({
                typeDefs: PostSchema,
     });

    const usersSchema = makeExecutableSchema({
                typeDefs: UsersSchema,

    }); 

У меня также есть преобразователи для отдельных схем, которые я тестировал и работаю.

//Resolvers merged using lodash 
const resolverK= merge(PostResolver, UsersResolver);

Затем я расширил схему публикации свойством автора, которое должно возвращать пользователя

// Extend schema with new fields
const linkTypeDefs = `
    extend type Post {
        author: Users
    }

`;

Объединенная схема примет идентификатор пользователя из Post typeDef и направит его в функцию распознавателя пользователей (userByID), чтобы получить данные пользователя, относящиеся к этой публикации.

type Post {
  _id: String
  topic: String
  userid: String
}

//Final Schema 
module.exports = mergeSchemas({
        schemas: [postSchema, usersSchema, linkTypeDefs],
        resolvers: mergeInfo => (

            {
           Post: {
            author: {
              fragment: `fragment PostFragment on Post { userid }`,
              resolve(parent, args, context, info) {
                const id = parent.userid;
                return mergeInfo.delegate(
                  'query',
                  'userByID',
                  {
                    id,
                  },
                  context,
                  info,
                );
              },
            },
          },
        }, 
         resolverK //resolvers for my individual schemas
        ),

      });

поэтому, когда я запускаю запрос внутри graphiql

{
  getPost(id:"5ab7f6adaf915a1d2093fa48"){
     _id
     topic
    userid
    author{
      name
    }
  }
}

//Выход

{
  "data": {
    "getPost": {
      "_id": "5ab7f6adaf915a1d2093fa48",
      "topic": "Some random post topic",
      "userid": "5ab7bf090b9b1a0a5cd3f6db",
      "author": null
    }
  }
}

Я получаю нулевое значение для автора. Кажется, он не выполняет мою функцию распознавателя для пользователей, потому что я тестировал его изолированно и все время работает. Это может быть преобразователь для схемы пользователя и публикации, показанный как «resolverk», переопределяющий преобразователь слияния, потому что все другие запросы и мутации работают, но я не совсем уверен.

const UsersResolver = {
    Query: {

      userByID: async (parent, { id }, { UsersModel }) => {
                        //Retrieve User from mongodb  
                       const user  = await UsersModel.findById(id); 
                       return user; 
      }

    },

    Mutation: {
       ...


    }



  }

Я знаю, что могу просто передать объект пользователя для Post typeDef вместо идентификатора пользователя, но я начинаю с простого случая, чтобы увидеть, как он работает, который мне понадобится, поскольку мое веб-приложение становится более сложным, и я избегаю переписывания материала позже

Благодарность

IMHO слияние было ненужным - вы могли включить резолверы в makeExecutables или предоставить их отдельно (массив резолверов) в слиянии.

xadm 05.08.2018 12:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
344
0

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