Как пакетировать запросы GraphQL Express - PullRequest
0 голосов
/ 06 ноября 2019

Проблема:

Запрос очень медленный (по крайней мере ~ 1 минута), потому что он выполняется для каждого message, полученного от messagesтип.

код:

Я хочу выполнить следующий запрос

messages(contactID:211375){
  text
  kids{
    name
  }
}

У меня есть следующие типы

messages: {
    type: new GraphQLList(MessageType),
    args: {contactID: {type: GraphQLID}},
    resolve(parent, args){
        let query = `SELECT *
        FROM messages_mapping INNER JOIN messages ON messages_mapping.message_id=messages.id 
        WHERE messages_mapping.contact_id=`+args.contactID;

        let result = db.get(query).then(function(response){
            return response.map((message)=>{
                return MessageTypeObj(message);
            });
        }).catch(function(err){
            console.log(err);
        });
        return result;
}

И MessageType разрешает kids, например:

kids: {
    type: new GraphQLList(StudentType),
    resolve: (parent,args, context) => {
        let query = `select * 
        from students 
        where id in 
        (select distinct student_id from messages_mapping where message_id=`+parent.id+` AND contact_id=`+context.contact_id+`)`;
        let result = db.get(query).then(function(response){
            return response.map((student)=>{
                return StudentTypeObj(student);
            });
        }).catch(function(err){
            console.log(err);
        });
        return result;
    }
}

Возможное решение:

Я читал о пакетировании запросов в одном запросе и знаю оdataloader & graphql-resolve-batch, но я не уверен, как реализовать это в моем случае.

...