Лучше передать объект призмы через контекст резольверам или использовать его напрямую? - PullRequest
0 голосов
/ 08 апреля 2019

Я хочу знать, лучше ли или есть какая-либо разница в использовании клиента prisma непосредственно в резолверах или передать его через контекст.

В официальной документации это передано через контекст:

const { prisma } = require('./generated/prisma-client');

const resolvers = {
  Query: {
    feed: (parent, args, context) => {
      return context.prisma.posts({ where: { published: true } })
    }
}

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: {
    prisma,
  },
})

Мой вопрос таков: почему клиент prisma не используется напрямую в средствах распознавания.

const { prisma } = require('./generated/prisma-client');

const resolvers = {
  Query: {
    feed: (parent, args, context) => {
      return prisma.posts({ where: { published: true } })
    }
}

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

Что-то не так в этом решении?

1 Ответ

1 голос
/ 08 апреля 2019

Вот несколько причин, почему вы хотите сделать это через контекст, хотя в вашем подходе нет ничего плохого:

  1. Когда вы будете писать модульные тесты, вы можете легко заменить призму фиктивной реализацией. Вот пример этого: https://github.com/javascript-af/javascript-af/blob/1e89e5436fbf0d6e3de37f12e6853a8ff6fc7898/packages/backend/tests/utils/gqlTestClient.ts#L12

  2. Таким способом вы можете легко передать два экземпляра призмы, например, если хотите запросить данные в другом месте. Вы можете передать context.db1 и context.db2, создав экземпляр класса Prisma с двумя отдельными конечными точками и передав его на сервер graphql с помощью двух ключей в объекте контекста.

  3. В документах graphql рекомендуется, чтобы доступ к БД проходил через контекст. Всегда приятно следовать спецификации: https://graphql.org/learn/execution/#asynchronous-resolvers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...