如何从graphql突变返回新记录而不是null

Posted

技术标签:

【中文标题】如何从graphql突变返回新记录而不是null【英文标题】:how to return new record from graphql mutation instead of null 【发布时间】:2018-06-18 21:57:40 【问题描述】:

我通读了 apollo-server-tutorial,并尝试仅使用 mongodb 复制它 - 没有 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

猫鼬: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

【问题讨论】:

当我 console.log 突变解析器的返回时我得到未定义,但是当我 console.log defaultReturn 回调处理程序的 res 时,它发生在突变解析器返回之后。因此我认为这可能是承诺/异步问题......仍然会感谢帮助 【参考方案1】:

我需要让猫鼬返回一个突变的承诺。所以我的 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 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() 链。

【讨论】:

以上是关于如何从graphql突变返回新记录而不是null的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GraphQL 突变返回数据?

GraphQL 在突变时返回 null [重复]

Graphql 突变返回 Post 400 错误,不知道如何解决

graphql 突变不返回嵌套字段

在单个 GraphQL 突变(graphene-django)中返回已删除对象的数组

AWSAppSync GraphQL突变执行两次