Apollo GraphQL - Импорт схемы .graphql как typeDefs

С помощью graphql-yoga вы можете просто импортировать свою схему, выполнив следующие действия: typeDefs: './src/schema.graphql'. Есть ли аналогичный способ сделать это с apollo-server-express?

Если нет, как импортировать typeDefs из внешнего файла .graphql?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Что такое Apollo Client и зачем он нужен?
Что такое Apollo Client и зачем он нужен?
Apollo Client - это полнофункциональный клиент GraphQL для JavaScript-приложений, который упрощает получение, управление и обновление данных в...
5
0
3 981
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать функцию makeExecutableSchema для передачи typeDefs. Что-то вроде этого:

import { makeExecutableSchema } from 'graphql-tools';
import mySchema from './src/schema.graphql';

const app = express();

const schema = makeExecutableSchema({
  typeDefs: [mySchema],
  resolvers: {
    ...
  },
});

app.use(
  '/graphql',
  graphqlExpress({ schema })
);
Ответ принят как подходящий

Я нашел способ сделать это, используя grahpql-import, который делает именно то, что мне нужно. См. Пример кода ниже:

import { ApolloServer } from 'apollo-server-express'
import { importSchema } from 'graphql-import'
import Query from './resolvers/Query'

const typeDefs = importSchema('./src/schema.graphql')
const server = new ApolloServer({
    typeDefs,
    resolvers: {
        Query
    }
})

const app = express()
server.applyMiddleware({ app })

app.listen({ port: 4000 })

**

ОБНОВЛЕНИЕ: graphql-import v0.7 +

**

importSchema теперь является асинхронным, и с ним следует обращаться как с обещанием. Просто оберните его в функцию async и просто await.

async function start() {
    const typeDefs = await importSchema(".src/schema.graphql")
}

Текущая версия graphql-import возвращает обещание, которое приводит к ошибке!

Otman Bouchari 09.03.2020 14:37

@OtmanBouchari Просто оберните его в асинхронную функцию и дождитесь результата :)

Hansel 09.03.2020 16:29

Другие вопросы по теме