(В настоящее время не использует Apollo)
Итак, у меня есть server.js:
let graphqlHTTP = require('express-graphql');
... // (other graphQL setup)
let users = []; // or any DB solution here
const {
UserType,
UserFactory
} = require('./schema/typeDef.js');
const { QueryType } = require('./schema/query.js');
... // similar imports
// other server declarations
И, например, у меня есть typeDef.js:
const UserType = new GraphQLObjectType({
name: 'User',
fields: {
id: { type: new GraphQLNonNull(GraphQLInt) },
username: { type: new GraphQLNonNull(GraphQLString }
}
});
const UserFactory = function(username, id) {
return {username: username, id: id};
};
module.exports = { UserType, UserFactory };
Проблема в том, что я хочу иметь возможность добавлять UserType в БД (в этом примере кода — массив пользователей) в server.js; но, конечно, typeDef.js не имеет доступа к объявленной БД в server.js.
Сначала я разделил файлы, потому что не хотел, чтобы server.js был слишком раздут кодом схемы.
Как мне это сделать? Спасибо!


Если вы пришли на священную землю без ответа, у меня есть один для вас. Следуйте инструкциям в эта ссылка.
По сути, создайте базу данных с мангустом, экспортируйте ее и используйте index.js в разных папках, чтобы сшить их вместе. Резолверы будут находиться в другой папке, чем типы, каждый со своим собственным index.js.
Теперь вы можете получить доступ к методам db в преобразователях, если для этого требуется модуль db. Обратите внимание, что вам не нужен babel, и я обнаружил, что cors вызывает проблемы (поэтому вы можете удалить его, если он тоже вызывает у вас проблемы).