error with GraphQL subscriptions "subscriptionsClient.subscribe is not a function"

0

I'm doing my first server with graphql, all great except for the part of the subscriptions, I get the following error "subscriptionsClient.subscribe is not a function"

this is the code of my resolve

const Curso = require('./models/Curso');
const Profesor = require('./models/Profesor');
const { PubSub } = require('graphql-subscriptions');

const pubsub = new PubSub();


const resolvers = {
    Query: { 
        //los datos de las relaciones que tiene el modelo, el parametro que lleva eager es el
        //nombre definido dentro del archivo que esta la relacion
        cursos: () => Curso.query().eager('[profesor, comentarios]'),
        profesores: () => Profesor.query().eager('cursos'),
        // en el objeto args llegan los parametros que se definan en Query en este caso curso solo tiene id
        curso: (rootValue, args) => Curso.query().eager('[profesor, comentarios]').findById(args.id),
        profesor: (rootValue, args) => Profesor.query().eager('cursos').findById(args.id),
        search: (_, args) => {
            return [
                Profesor.query().findById(5),
                Curso.query().findById(5)
            ]//se devuelve array de promises
        }

    Mutation: {
        //Verificar documentacion de objection para saber la respuesta de sus metodos
        profesorAdd: (_, args) => { //estos metodos siempre reciben 2 parametros (rootValue, args), rooValue lo ponemos como _ para denotar que no se usa
            return Profesor.query().insert(args.profesor);
        },
        profesorEdit: (_, args) => {
            return Profesor.query().patchAndFetchById(args.Id, args.profesor);
        },
        profesorDelete: (_, args) => {
            return Profesor.query().findById(args.Id).then( (profesor) => {
                return Profesor.query().deleteById(args.Id).then( (rowsAfected) => {
                    if(rowsAfected > 0) return profesor;
                    //Se usa el template tag ´ para poder agregar variables dentro del string
                    throw new Error('No se afecto ningun registro porque el profesor con id ${args.Id} no existe');
                } );
            } );
        },

        cursoAdd: (_, args) => {
            return Curso.query().insert(args.curso).then( (course) => {
              pubsub.publish('commentAdded', { commentAdded: { id: course.id, nombre: 'Nuevo comentario!' }});
            });
        },
        cursoEdit: (_, args) => {
            return Curso.query().patchAndFetchById(args.Id, args.curso);
        },
        cursoDelete: (_, args) => {
            console.log(Curso.responseCourse);
            return Curso.query().findById(args.Id).then( (curso) => {
                return Curso.query().deleteById(args.Id).then( () => curso );
            } );
        }
    },

    Subscription: {
      commentAdded: {
        subscribe: () => pubsub.asyncIterator('commentAdded')
      }
    }
}


module.exports = resolvers;

// This is the code of my schema

const { makeExecutableSchema } = require('graphql-tools');

const resolvers = require('../resolvers');
const profesor = require('./Curso');
const curso = require('./Profesor');

const rootQuerys = '
    union responseSearch = Profesor | Curso

    type Query {
        cursos: [Curso]
        profesores: [Profesor]
        curso(id: Int) : Curso
        profesor(id: Int): Profesor
        search(query: String!) : [responseSearch]
    }

    type Mutation {
        profesorAdd(profesor: newProfesor) : Profesor
        profesorEdit(Id: Int!, profesor: profesorEditable) : Profesor
        profesorDelete(Id: Int!) : Profesor

        cursoAdd(curso: newCurso) : Curso
        cursoEdit(Id: Int!, curso: cursoEditable) : Curso
        cursoDelete(Id: Int!) : Curso
    }

    type Subscription {
      commentAdded : Comentario 
    }
'

const schema = makeExecutableSchema({
    typeDefs: [rootQuerys, curso, profesor],
    resolvers
});

module.exports = schema;
    
asked by Daniel Valbuena 26.08.2018 в 05:34
source

0 answers