Prisma Playground 中的 React + Apollo“入门”错误
Posted
技术标签:
【中文标题】Prisma Playground 中的 React + Apollo“入门”错误【英文标题】:React + Apollo "Getting Started" Error in Prisma Playground 【发布时间】:2021-06-17 21:04:36 【问题描述】:我在 React + Apollo 入门章节:https://www.howtographql.com/react-apollo/1-getting-started/
当我在 Prisma Playground 中输入以下查询时(如教程告诉我的那样):
mutation CreatePrismaLink
post(
description: "Prisma gives you a powerful database toolkit ????"
url: "https://prisma.io"
)
id
mutation CreateApolloLink
post(
description: "The best GraphQL client for React"
url: "https://www.apollographql.com/docs/react/"
)
id
我收到了我不理解的错误消息。好像是服务器的问题
"errors": [
"message": "Argument id for data.postedBy.connect.id must not be null. Please use undefined instead.\n",
"locations": [
"line": 2,
"column": 3
],
"path": [
"post"
],
"extensions":
"code": "INTERNAL_SERVER_ERROR",
"exception":
"clientVersion": "2.12.1",
"stacktrace": [
"Error: Argument id for data.postedBy.connect.id must not be null. Please use undefined instead.",
"",
" at Document.validate (C:\\Users\\shanm\\hackernews-react-apollo\\server\\node_modules\\@prisma\\client\\runtime\\index.js:77413:19)",
" at NewPrismaClient._executeRequest (C:\\Users\\shanm\\hackernews-react-apollo\\server\\node_modules\\@prisma\\client\\runtime\\index.js:79065:17)",
" at C:\\Users\\shanm\\hackernews-react-apollo\\server\\node_modules\\@prisma\\client\\runtime\\index.js:79002:52",
" at AsyncResource.runInAsyncScope (async_hooks.js:197:9)",
" at NewPrismaClient._request (C:\\Users\\shanm\\hackernews-react-apollo\\server\\node_modules\\@prisma\\client\\runtime\\index.js:79002:25)",
" at Object.then (C:\\Users\\shanm\\hackernews-react-apollo\\server\\node_modules\\@prisma\\client\\runtime\\index.js:79119:39)",
" at processTicksAndRejections (internal/process/task_queues.js:93:5)"
]
],
"data": null
请帮我找出问题所在?
【问题讨论】:
【参考方案1】:这是旧的,但以防其他人遇到这个问题并像我一样用谷歌搜索:
不幸的是,这里的答案对我不起作用,但解决方案是 Node+GraphQL 教程中介绍的内容,您可能无法自己弄清楚:
为了发帖,您必须先创建一个用户,然后获得该用户的授权。页面上列出了创建用户的突变作为示例,但不幸的是,作者在尝试创建帖子之前忘记指示读者运行它。
-
将其粘贴到 Playground 中以创建用户
mutation
signup(name: "Sarah", email: "sarah@prisma.io", password: "graphql")
token
user
id
复制返回的token
打开左下方的“HTTP 标头”窗格
用你的令牌输入这个:
"Authorization": "Bearer TOKEN_HERE"
-
现在您可以运行突变来创建帖子
【讨论】:
【参考方案2】:这是因为服务器在编写时考虑到了 Post 将始终属于 User 的业务规则。数据库在 Link 表上有一个 NOT NULL postedById 字段,即帖子将始终附加一个用户 ID。您需要在 Prisma ORM 模式的 Link 模型中使 postedById 字段为空。要解决此问题,请对服务器端代码进行以下更改并重新启动服务器
在服务器文件夹中转到schema.prisma 文件,并通过使用后缀将postedBy 和postedById 两个字段设为可选/可为空?
postedBy? User @relation(fields: [postedById], references:[id])
postedById? Int
然后运行以下命令以重新创建具有更改的数据库
npx prisma migrate reset
更新Mutation.js file中的post解析器函数以替换该行
postedBy: connect: id: userId
与
postedById: userId,
因为 prisma connect api 不接受空值
【讨论】:
以上是关于Prisma Playground 中的 React + Apollo“入门”错误的主要内容,如果未能解决你的问题,请参考以下文章
Prisma orderBy 在 Playground 之外的解析器/查询中
prisma2:如何通过 prisma.user.findMany() 中的非必填字段进行过滤?