Опознаватель запросов внутри функции ожидания мутаций опущен - PullRequest
0 голосов
/ 06 апреля 2019

У меня небольшие проблемы при запросе внутри мутации, я думаю, что, возможно, я неправильно вызываю запрос, потому что он выполняется, но не ожидает ответа, поэтому я получаю неопределенное значение, пожалуйста, исправьте меня.

Обратите внимание, что я использую привязку к призме

Это мои преобразователи мутаций:

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;

В функции входа в систему при запросе пользователя или пользователей я пробую оба запроса, даже зная, что у меня электронное письмо в качестве уникального поля. всегда печатается. Такой пользователь не найден из-за того, что я получил undefined, IDK, если это из-за привязки к призме. или неправильно выполняет вызов функции для призмы.

Вот моя схема.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
}

Так что для призменной привязки мне не нужно определять пользователей запроса (), привязка будет обрабатывать это право ?? Даже если бы это было так, у меня была бы другая ошибка, которой нет.

Может быть, мне не хватает какой-то маленькой детали, буду благодарен, если кто-то укажет мне правильное направление.

Заранее спасибо ...

1 Ответ

0 голосов
/ 08 апреля 2019

Вы передаете неправильный набор, выбранный для запроса. Вы возвращаете 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,
    }
  },
...