K
K
Kirill Gavrilov2019-07-10 09:42:11
MongoDB
Kirill Gavrilov, 2019-07-10 09:42:11

How to separate graphql resolvers in node.js?

Здравствуйте уважаемые разработчики!
Я сейчас осваиваю node.js и в том числе graphql для работы с mongodb.
Собственно дошел я до такой задачи, что мне нужно разделить все resolver'ы, чтобы они были в отдельных файлах, как: ./queries/...... - файлы запросов к ДБ
и
./mutations/...... - файлы изменений в БД
ну и по аналогии еще подписки(хотя пока их нет).
И так мой код где у меня сейчас хранятся все резолверы:

import helloWorld from './queries/helloWorld'; //для проверки выноса запроса в сторонний файл
const { User } = require('../models/abracode');

export default {
    Query: {
        helloWorld, //всё работает!
        // eslint-disable-next-line no-return-await
        getUsers: async () => await User.find({}).exec()   
    },
    Mutation: {
        addUser: async (_, args) => {
            try {
                const response = await User.create(args);
                return response;
            } catch(e) {
                return e.massage;
            }
        },
        removeUser: async (_, args) => {
            try {
                await User.remove(args);
                return 'OK!';
            } catch(e) {
                return 'catch';
            }
        }
    }
};

Моя схема, она вынесена в отдельный файл 'schema.gql':
type Users {
    id: ID!
    firstName: String,
    lastName: String
}

type Query {
    helloWorld: String
    getUsers: [Users]
}

type Mutation {
    addUser(firstName: String!, lastName: String!): Users
    removeUser(firstName: String!, lastName: String!): Users
}

В итоге всё работает!
Но мне надо сделать так, чтобы можно было: getUsers, addUser и removeUser - вынести также как и файл helloworld и подключить его.
Немного не могу понять как это сделать: в самом файле helloWorld.js написано элементарно:
export default () => 'hello world!!!!';
Где-то я что-то упускаю, не могу понять что. Заранее спасибо!

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
Sybe, 2019-07-14
@Sybe

Немного непонятна ваша проблема. Если вы уже вынесли helloWorld в отдельный файл, и всё работает, то какие проблемы с остальными файлами?
Выносите их точно так же:

// файл queries/getUsers.js

import { User } from '../../models/abracode';

export default async () => await User.find({}).exec();

И используйте точно так же:
// файл с инициализацией схемы

import getUsers from '../queries/getUsers';

export default {
    Query: {
        helloWorld, //всё работает!
        getUsers,   
    },
    ...
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question