Как отправить запрос GraphQL с Node.js в Prisma

Я только что научился создавать сервер GraphlQL с использованием graphql-yoga и prisma-binding на основе учебник HowToGraphQL.

Вопрос: До сих пор единственным способом запроса базы данных было использование веб-страницы Prisma Playground, которая была запущена с помощью команды graphql playground.

Можно ли выполнить тот же запрос из скрипта Node.js? Я столкнулся с клиентом Apollo, но, похоже, он предназначен для использования из внешнего интерфейса, такого как React, Vue, Angular.


person Nyxynyx    schedule 25.07.2018    source источник


Ответы (2)


Это абсолютно возможно, в конечном итоге Prisma API - это просто HTTP, где вы помещаете запрос в тело POST запроса.

Следовательно, вы также можете использовать fetch или prisma-binding внутри вашего Node-скрипта.

Ознакомьтесь с этим руководством, чтобы узнать больше: https://www.prisma.io/docs/tutorials/access-prisma-from-scripts/access-prisma-from-a-node-script-using-prisma-bindings-vbadiyyee9

Это также может быть полезно, поскольку объясняет, как использовать fetch для запроса API: https://github.com/nikolasburk/gse/tree/master/3-Use-Prisma-GraphQL-API-from-Код

Вот как выглядит использование fetch:

const fetch = require('node-fetch')

const endpoint = '__YOUR_PRISMA_ENDPOINT__'

const query = `
query {
  users {
    id
    name
    posts {
      id
      title
    }
  }
}
`

fetch(endpoint, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ query: query })
})
  .then(response => response.json())
  .then(result => console.log(JSON.stringify(result)))

Если вы хотите использовать легкую оболочку вокруг fetch, которая избавляет вас от написания шаблонов, обязательно ознакомьтесь с graphql-request < / а>.

И вот как вы используете привязки Prisma:

const { Prisma } = require('prisma-binding')

const prisma = new Prisma({
  typeDefs: 'prisma.graphql',
  endpoint: '__YOUR_PRISMA_ENDPOINT__'
})

// send `users` query
prisma.query.users({}, `{ id name }`)
  .then(users => console.log(users))
  .then(() =>
    // send `createUser` mutation
    prisma.mutation.createUser(
      {
        data: { name: `Sarah` },
      },
      `{ id name }`,
    ),
  )
  .then(newUser => {
    console.log(newUser)
    return newUser
  })
  .then(newUser =>
    // send `user` query
    prisma.query.user(
      {
        where: { id: newUser.id },
      },
      `{ name }`,
    ),
  )
  .then(user => console.log(user))
person nburk    schedule 25.07.2018
comment
Спасибо! Как выбрать между использованием prisma-bindings или graphql-request? - person Nyxynyx; 25.07.2018
comment
Я думаю, что привязки Prisma обычно являются предпочтительным способом, поскольку они обеспечивают большое удобство при взаимодействии с Prisma API. graphql-request - это более общий и легкий подход, в котором вы можете использовать очень простые сценарии. - person nburk; 26.07.2018

Поскольку вы используете Prisma и хотите запросить его из сценария NodeJS, я думаю, вы могли упустить возможность создания клиента из ваших определений Prisma.

Он заботится об обработке методов create / read / update / delete / upsert в зависимости от вашей модели данных. Кроме того, вы можете меньше беспокоиться о синхронизации ваших моделей и запросов / мутаций, поскольку они генерируются с использованием Prisma CLI (prisma generate).

Я считаю, что это позволяет сэкономить много времени на кодирование по сравнению с использованием необработанных запросов GrahQL, которые я сохраняю для более сложных запросов / мутаций.

Дополнительные сведения см. В их официальной документации. .

Также обратите внимание, что использование клиента Prisma является рекомендуемым способом использования Prisma в хранилище prisma-binding. , пока не:

Если вы явно не хотите использовать делегирование схемы

о котором я не могу вам много рассказать.

Я не знал о пакете prisma-binding, пока не прочитал ваш вопрос.

РЕДАКТИРОВАТЬ:

Вот еще одна ссылка, которая позволяет увидеть их обоих в перспективе.

person Anas Tiour    schedule 15.12.2018