Prisma 游乐场中的 React + Apollo "Getting Started" 错误
React + Apollo "Getting Started" Error in Prisma Playground
我在入门 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
}
请帮我找出问题所在?
那是因为服务器在编写时考虑了业务规则,即 Post 将始终属于用户。数据库在 Link table 上有一个 NOT NULL postedById 字段,即 post 将始终附加一个用户 ID。您需要在 Prisma ORM 模式的 Link 模型中使 postedById 字段可为空。要解决此问题,请对服务器端代码进行以下更改并重新启动服务器
在服务器文件夹中,转到 schema.prisma 文件,并在 postedBy 和 postedById optional/nullable 两个字段后加上后缀?
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 不接受空值
这是旧问题,但如果有人遇到这个问题并像我一样用谷歌搜索:
不幸的是,这里的答案对我不起作用,但解决方案已在 Node+GraphQL 教程中介绍,您可能无法自己弄清楚:
为了 post 您必须首先创建一个用户,然后被授权为该用户。创建用户的突变在页面上作为示例列出,但不幸的是,作者在尝试创建 post.[=13= 之前忘记指示 reader 到 运行 它]
- 将此粘贴到 playground 中以创建用户
mutation {
signup(name: "Sarah", email: "sarah@prisma.io", password: "graphql") {
token
user {
id
}
}
}
复制返回的token
打开左下方的“HTTP Headers”窗格
用您的令牌输入:
{
"Authorization": "Bearer TOKEN_HERE"
}
- 现在您可以 运行 突变来创建 posts
我在入门 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
}
请帮我找出问题所在?
那是因为服务器在编写时考虑了业务规则,即 Post 将始终属于用户。数据库在 Link table 上有一个 NOT NULL postedById 字段,即 post 将始终附加一个用户 ID。您需要在 Prisma ORM 模式的 Link 模型中使 postedById 字段可为空。要解决此问题,请对服务器端代码进行以下更改并重新启动服务器
在服务器文件夹中,转到 schema.prisma 文件,并在 postedBy 和 postedById optional/nullable 两个字段后加上后缀?
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 不接受空值
这是旧问题,但如果有人遇到这个问题并像我一样用谷歌搜索:
不幸的是,这里的答案对我不起作用,但解决方案已在 Node+GraphQL 教程中介绍,您可能无法自己弄清楚:
为了 post 您必须首先创建一个用户,然后被授权为该用户。创建用户的突变在页面上作为示例列出,但不幸的是,作者在尝试创建 post.[=13= 之前忘记指示 reader 到 运行 它]
- 将此粘贴到 playground 中以创建用户
mutation {
signup(name: "Sarah", email: "sarah@prisma.io", password: "graphql") {
token
user {
id
}
}
}
复制返回的
token
打开左下方的“HTTP Headers”窗格
用您的令牌输入:
{
"Authorization": "Bearer TOKEN_HERE"
}
- 现在您可以 运行 突变来创建 posts