2

我刚刚学习了如何使用graphql-yogaprisma-binding基于HowToGraphQL 教程创建 GraphlQL 服务器。

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

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

4

2 回答 2

5

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

因此,您也可以在 Node 脚本中使用fetchor 。prisma-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))
于 2018-07-25T08:17:49.140 回答
0

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

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

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

查看他们的官方文档以获取更多详细信息。

另外,请注意,使用 Prisma 客户端是在prisma 绑定资源库中使用 Prisma 的推荐方式,除非:

除非您明确想要使用模式委托

我不能告诉你太多。

直到我读到你的问题,我才知道这个prisma-binding包裹。

编辑:

这是另一个链接,可以将它们都放在透视图中

于 2018-12-15T13:47:39.370 回答