Проблема настройки подписки с GraphQL - PullRequest
0 голосов
/ 15 февраля 2019

Добрый день:

Я пытаюсь настроить свой сервер graphql для подписки. Это моя схема.js

const ChatCreatedSubscription = new GraphQLObjectType({ 
  name: "ChatCreated",
  fields: () => ({
    chatCreated: {  
          subscribe: () => pubsub.asyncIterator(CONSTANTS.Websocket.CHANNEL_CONNECT_CUSTOMER) 
    }
  })
});

const ChatConnectedSubscription = {
  chatConnected: {
      subscribe: withFilter(
         (_, args) => pubsub.asyncIterator(`${args.id}`),
         (payload, variables) => payload.chatConnect.id === variables.id,
      )
  }
}




const subscriptionType = new GraphQLObjectType({
  name: "Subscription",
  fields: () => ({
    chatCreated: ChatCreatedSubscription,
    chatConnected: ChatConnectedSubscription
  })
});

const schema = new GraphQLSchema({
  subscription: subscriptionType
});

Однако я получаю эту ошибку, когда япопробуйте запустить мой сервер подписки:

ERROR introspecting schema:  [
  {
    "message": "The type of Subscription.chatCreated must be Output Type but got: undefined."
  },
  {
    "message": "The type of Subscription.chatConnected must be Output Type but got: undefined."
  }
]

1 Ответ

0 голосов
/ 15 февраля 2019

Определение поля - это объект, который включает в себя следующие свойства: type, args, description, deprecationReason и resolve.Все эти свойства являются необязательными, кроме type.Каждое поле в вашей карте поля должно быть таким объектом - вы не можете просто установить для поля тип, который вы делаете.

Неправильно:

const subscriptionType = new GraphQLObjectType({
  name: "Subscription",
  fields: () => ({
    chatCreated: ChatCreatedSubscription,
    chatConnected: ChatConnectedSubscription
  })
});

Правильно:

const subscriptionType = new GraphQLObjectType({
  name: "Subscription",
  fields: () => ({
    chatCreated: {
      type: ChatCreatedSubscription,
    },
    chatConnected: {
      type: ChatConnectedSubscription,
    },
  })
});

Проверьте документы для дополнительных примеров.

...