как вернуть новую запись из мутации graphql вместо null

1

Я прочитал учебник apollo-server-tutorial, и я пытаюсь воспроизвести его только с mongodb - no sqllite. Я прихожу из метеора, поэтому я изучаю асинхронные и мангусты, пока я нахожусь в нем.

Моя мутация для addAuthor() работает правильно (я вижу новую запись в БД), но graphiql возвращает null. Как я могу вернуть ожидаемые поля?

mutation {
  addAuthor(firstName: "falieson", lastName:"p") {
    _id
    firstName
    lastName
  }
}

{
  "data": {
    "addAuthor": null
  }
}

Схема: https://github.com/Falieson/apollo-server-tutorial-only-mongodb/blob/master/data/schema.js#L39

Резольвер: https://github.com/Falieson/apollo-server-tutorial-only-mongodb/blob/master/data/resolvers.js#L38

Mongoose: https://github.com/Falieson/apollo-server-tutorial-only-mongodb/blob/master/data/models/mongoose.js#L51

Модель: https://github.com/Falieson/apollo-server-tutorial-only-mongodb/blob/master/data/models/index.js#L7

  • 0
    когда я console.log возвращает преобразователь мутаций, я получаю неопределенное значение, но когда я console.log возвращает обработчик обратного вызова defaultReturn, это происходит после того, как преобразователь мутаций возвращается. Поэтому я думаю, что это проблема обещания / асинхронности ... все равно буду признателен за помощь
Теги:
mongoose
graphql
apollo-server

1 ответ

2
Лучший ответ

Мне нужно было, чтобы мангустцы обещали мутацию. Итак, мой MongooseModel.create() изменяется от

const record = new this.collection(args)
return record.save(cb)

использовать Promise

const record = new this.collection(args)
return new Promise((resolve, reject) => {
   record.save((err, res) => {
      err ? reject(err): resolve(res)
   });
});

к использованию Async/Await

 async create(obj = {}) {
   const args = {
     ...this.defaultRecord(),
     ...obj
   }
   const record = new this.Collection(args)

   try {
     const savedRecord = await record.save()
     return savedRecord
   } catch (err) {
     handleError(err)
   }
 }

Моя мутация не должна меняться вообще, но мой генератор светильников также должен быть обновлен, чтобы использовать цепочку Promise.then().

Ещё вопросы

Сообщество Overcoder
Наверх
Меню