如何将 GraphQL 查询从 Node.js 发送到 Prisma

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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 是一种更通用、更轻量级的方法,您可以使用非常简单的脚本。

以上是关于如何将 GraphQL 查询从 Node.js 发送到 Prisma的主要内容,如果未能解决你的问题,请参考以下文章

如何从需要 return 语句的 GraphQL 解析器中调用异步 node.js 函数?

Node.js - 如何使用 graphql 获取关联的模型数据?

将数据从服务器(Node.js)发送到 GraphQL 服务器中的客户端(React 组件)

graphql prisma node js postgresql如何将创建日期/更新字段添加到graphql类型?

GraphQL Node.js:确定查询中使用的类型

Node.js Mongodb GraphQL - 突变和查询