在graphql中为用户类型中的字段编写字段级解析器
Posted
技术标签:
【中文标题】在graphql中为用户类型中的字段编写字段级解析器【英文标题】:write field level resolver for a field in user type in graphql 【发布时间】:2021-08-23 00:46:45 【问题描述】:我正在尝试使用 uuid npm 包为用户类型中的 id 字段生成用户 ID。我不确定我应该在哪里以及如何写它。
在我的 createUser 突变中,我只要求用户输入名称和电子邮件的值,而不是 id,因为我希望它由 uuid 包生成,这就是我相信我在createUser 突变。
这是我的 schema.graphql 文件中的内容
type Query
users: [User!]!
user(id: ID!): User!
type Mutation
createUser(name: String!, email: String!): User!
type User
id: ID!
name: String!
email: String!
这是我访问类型的 index.js 文件中的内容 -
const ApolloServer = require('apollo-server')
const fs = require('fs');
const path = require('path');
const PrismaClient = require('.prisma/client')
const v4: uuidv4 = require('uuid')
const prisma = new PrismaClient()
const resolvers =
Query:
//users: () => users
users: async (parent, args, context, info) =>
args.test = 'TestContext'
return await context.prisma.user.findMany()
,
user: async (parent, args, context, info) =>
return await context.prisma.user.findUnique(
where:
id: parseInt(args.id)
,
)
,
Mutation:
createUser: async (parent, args, context, info) =>
return await context.prisma.user.create(
data:
id: uuidv4(),
name: args.name,
email: args.email
)
const server = new ApolloServer(
typeDefs: fs.readFileSync(//referencing a file that has the schema definition
path.join(__dirname, 'schema.graphql'),
'utf8'
),
//typeDefs: typeDefs,//Testing
resolvers,
context:
prisma,
)
server.listen().then(( url ) =>
console.log(`Server is running on $url`)
)
这是我执行 createUser 变异调用的方式 -
mutation
createUser(name:"test test", email:"test@test.com")
id
name
email
错误信息 -
Invalid `prisma.user.create()` invocation:
data:
id: 'af8a177b-824f-466b-93a5-7f5a1968b3f2',
~~
name: 'test test',
email: 'test@test.com'
Unknown arg `id` in data.id for type userCreateInput. Available args:
type userCreateInput
name: String
email: String
棱镜模型 -
modelmodel user
id Int @id @default(autoincrement())
name String
email String @unique
【问题讨论】:
这不起作用吗?到目前为止,您实际上还没有问过问题。如果坏了,是什么错误? 对不起,我忘记输入错误了,我已经在原帖中添加了错误。 你是如何定义你的棱镜模型的?这是 Prisma 错误,而不是 GraphQL 错误。 我没有对 prisma 模型进行任何更改,如果我从 id 中删除 uuid 并要求用户输入带有突变的 id,它可以工作。我将棱镜模型附加到原始帖子 【参考方案1】:UUID 不是Int
,因此如果您想使用 UUID,id Int @id @default(autoincrement())
的 Prisma 架构没有意义。您的parseInt
电话也是如此。如果你想使用 UUID,那么你需要
model user
id String @id
name String
email String @unique
或者甚至更好,删除你的 id: uuidv4(),
行并执行
model user
id String @id @default(uuid())
name String
email String @unique
【讨论】:
尝试了第二个选项,我现在收到一条不同的错误消息 - "message": "\nInvalidprisma.user.create()
调用:\n\n\n 字段上的唯一约束失败:(id
)",
我的错误,更改主键后没有运行 prisma migrate。这工作感谢loganfsmyth以上是关于在graphql中为用户类型中的字段编写字段级解析器的主要内容,如果未能解决你的问题,请参考以下文章