【问题标题】:How to send a GraphQL Query from Node.js to Prisma如何将 GraphQL 查询从 Node.js 发送到 Prisma
【发布时间】:2019-01-01 19:16:42
【问题描述】:

我刚刚学习了如何基于the HowToGraphQL tutorial 使用graphql-yogaprisma-binding 创建一个GraphlQL 服务器。

问题:到目前为止,查询数据库的唯一方法是使用通过运行命令graphql playground 启动的 Prisma Playground 网页。

是否可以从 Node.js 脚本执行相同的查询?我遇到了 Apollo 客户端,但它似乎是为了在 React、Vue、Angular 等前端层使用。

【问题讨论】:

    标签: graphql apollo apollo-client prisma prisma-graphql


    【解决方案1】:

    由于您正在使用 Prisma 并希望从 NodeJS 脚本中查询它,我认为您可能忽略了从您的 Prisma 定义中生成客户端的选项。

    它负责根据您的数据模型处理创建/读取/更新/删除/更新方法。 此外,您不必担心保持模型和查询/突变同步,因为它是使用 Prisma CLI (prisma generate) 生成的。

    与使用原始 GrahQL 查询相比,我发现它可以节省大量编码时间,我将其用于更复杂的查询/突变。

    查看他们的official documentation 了解更多详情。

    另外,请注意,使用 Prisma 客户端是在 prisma-binding resository 中使用 Prisma 的推荐方式,除非:

    除非您明确想要使用架构委托

    我不能告诉你太多。

    在阅读您的问题之前,我不知道 prisma-binding 包。

    编辑:

    这里是另一个link,它让他们都在透视中

    【讨论】:

      【解决方案2】:

      这绝对是可能的,最终 Prisma API 只是简单的 HTTP,您将查询放入 POST 请求的 body 中。

      因此,您也可以在 Node 脚本中使用 fetchprisma-binding

      查看本教程以了解更多信息: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-Code

      这是使用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))
      

      【讨论】:

      • 谢谢!如何在使用prisma-bindingsgraphql-request 之间做出选择?
      • 我认为 Prisma 绑定通常是首选方式,因为它们在与 Prisma API 对话时提供了很多便利。 graphql-request 是一种更通用、更轻量级的方法,您可以使用非常简单的脚本。
      猜你喜欢
      • 2017-07-21
      • 1970-01-01
      • 2019-11-05
      • 2018-08-04
      • 2021-07-16
      • 2020-06-03
      • 2018-03-25
      • 2019-06-16
      • 2020-12-31
      相关资源
      最近更新 更多