如何将 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-yoga
和prisma-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 脚本中使用 fetch
或 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))
【讨论】:
谢谢!如何在使用prisma-bindings
或graphql-request
之间做出选择?
我认为 Prisma 绑定通常是首选方式,因为它们在与 Prisma API 对话时提供了很多便利。 graphql-request
是一种更通用、更轻量级的方法,您可以使用非常简单的脚本。以上是关于如何将 GraphQL 查询从 Node.js 发送到 Prisma的主要内容,如果未能解决你的问题,请参考以下文章
如何从需要 return 语句的 GraphQL 解析器中调用异步 node.js 函数?
Node.js - 如何使用 graphql 获取关联的模型数据?
将数据从服务器(Node.js)发送到 GraphQL 服务器中的客户端(React 组件)