省略突变等待函数中的查询解析器
Posted
技术标签:
【中文标题】省略突变等待函数中的查询解析器【英文标题】:Query resolver inside Mutation await function omitted 【发布时间】:2019-08-28 02:52:33 【问题描述】:我在突变内部查询时遇到了一点麻烦,我相信我可能没有正确调用查询,因为它执行但没有等待响应,所以我得到一个未定义的值,请纠正我。
请注意,我使用的是棱镜绑定
这是我的变异解析器:
const Mutation =
async signUp(parent, args, ctx, info)
const password = await bcrypt.hash(args.password, 10)
const user = await ctx.db.mutation.createUser( data: ...args, password )
const token = jwt.sign( userId: user.id , process.env.PRISMA_SECRET)
return
token,
user,
,
async login(parent, args, ctx, info)
const user = await ctx.db.query.users( where:email: args.email, info)
if (!user)
throw new Error('No such user found')
const valid = bcrypt.compare(args.password, user.password)
if (!valid)
throw new Error('Invalid password')
const token = jwt.sign( userId: user.id , process.env.PRISMA_SECRET)
return
token,
user,
,
;
module.exports = Mutation;
在登录功能中查询 一个或多个用户时,即使知道我有电子邮件作为唯一字段,我也会尝试这两个查询它总是打印 No such user found due I receive undefined, IDK 如果是因为 prisma-绑定或未正确执行对 prisma 的函数调用。
这是我的 schema.graphql
type Query
// some queries
type Mutation
signUp(
name: String!
email: String!
password: String!
): AuthPayLoad
login(
email: String!
password: String!
): AuthPayLoad
type AuthPayLoad
token: String
user: User
所以对于 prisma-binding 我不必定义查询 users(),绑定会处理它吗?即使是这样,我也会有另一个错误,但事实并非如此。
也许我遗漏了一些小细节,如果有人指出我正确的方向,我将不胜感激。
提前谢谢...
【问题讨论】:
电子邮件是用户查询中“数据”的一部分吗?如果是这样,您需要const user = await ctx.db.query.user( where:email: args.data.email)
【参考方案1】:
您将错误的选择集传递给查询。您在登录突变中返回 AuthPayload,但您将其传递给用户查询,这肯定是不兼容的。
试试这个
async login(parent, args, ctx, info)
const user = await ctx.db.query.user( where:email: args.email,` id name email `) // pass in the other fields you want in this selection set
if (!user)
throw new Error('No such user found')
const valid = bcrypt.compare(args.password, user.password)
if (!valid)
throw new Error('Invalid password')
const token = jwt.sign( userId: user.id , process.env.PRISMA_SECRET)
return
token,
user,
,
【讨论】:
以上是关于省略突变等待函数中的查询解析器的主要内容,如果未能解决你的问题,请参考以下文章
如何在 GraphQL 突变/解析器中为每个用户创建和停止唯一的计时器