在 Prisma + GraphQL 中使用字符串列表作为参数的突变
Posted
技术标签:
【中文标题】在 Prisma + GraphQL 中使用字符串列表作为参数的突变【英文标题】:Mutation with list of strings as argument in Prisma + GraphQL 【发布时间】:2020-11-24 00:59:55 【问题描述】:我正在尝试进行突变,但参数出现错误。
在 schema.graphql 我有以下内容:
type User
id: ID!
name: String!
email: String!
age: Int!
height: Float!
weight: Float!
goals: [String!]!
history: [Routine!]!
type Mutation
signup(email: String!, password: String!, name: String!, age: Int!, height: Float!, weight: Float!, goals: [String!]!): AuthPayload
在 schema.prisma 中:
model User
id Int @id @default(autoincrement())
name String
email String @unique
password String
age Int
weight Float
height Float
goals String[]
history Routine[]
那么我的变异解析器如下:
async function signup(parent, args, context, info)
// 1
const password = await bcrypt.hash(args.password, 10)
// 2
const user = await context.prisma.user.create( data: ...args, password )
// 3
const token = jwt.sign( userId: user.id , APP_SECRET)
// 4
return
token,
user,
但是当我在 GraphQL Playground 上尝试该功能时,例如:
mutation
signup(
name: "Esteban"
email: "esteban@gmail.com"
password: "Password"
age: 23
height: 1.84
weight: 70.0
goals: ["WEIGHT_LOSS"]
)
token
user
id
我收到以下错误:
"data":
"signup": null
,
"errors": [
"message": "\nInvalid `context.prisma.user.create()` invocation in\n/Users/estebankramer1/Documents/ITBA/pf-proyf/server/src/resolvers/Mutation.js:10:42\n\n 6 // 1\n 7 const password = await bcrypt.hash(args.password, 10)\n 8 \n 9 // 2\n→ 10 const user = await context.prisma.user.create(\n data: \n email: 'esteban@gmail.com',\n password: '$2a$10$hL1sMErBEcg98hpk5kRNpef2isI5d/O66zfRom8sQyThIHue7ku2O',\n name: 'Esteban',\n age: 23,\n height: 1.84,\n weight: 70,\n goals: [\n 'WEIGHT_LOSS'\n ]\n \n )\n\nUnknown arg `0` in data.goals.0 for type UserCreategoalsInput. Available args:\n\ntype UserCreategoalsInput \n set?: List<String>\n\n\n",
"locations": [
"line": 2,
"column": 3
],
"path": [
"signup"
]
]
我不知道自己做错了什么,也找不到带有字符串列表的 Mutations 示例。
【问题讨论】:
【参考方案1】:事实证明我需要将突变更改为以下内容:
async function signup(parent, args, context, info)
// 1
const password = await bcrypt.hash(args.password, 10)
// 2
const user = await context.prisma.user.create( data:
...args,
goals:
set: args.goals
,
password
)
// 3
const token = jwt.sign( userId: user.id , APP_SECRET)
// 4
return
token,
user,
基本上使用集合操作。 我不知道为什么,Prisma 的文档很糟糕。也许有人可以澄清一下?
【讨论】:
感谢您指出这一点。我们一直在努力改进文档,您可以找到使用标量列表here。您也可以使用ctrl+space
来检查智能感知以查看 Prisma Client 提供的所有方法和属性。以上是关于在 Prisma + GraphQL 中使用字符串列表作为参数的突变的主要内容,如果未能解决你的问题,请参考以下文章
无法通过 Prisma 在 GraphQL-yoga 中使用片段
为啥在使用 Prisma 时需要使用 GraphQL 关系?