【问题标题】: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}})

标签: javascript graphql prisma


【解决方案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,
    }
  },

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2023-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多