vseriousv
@vseriousv
Node.js-разработчик

Как разделить resolver'ы graphql в 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!!!!';
Где-то я что-то упускаю, не могу понять что. Заранее спасибо!
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 1
@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,   
    },
    ...
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы