如何使用带有 Mongoose 和 ES6 承诺的 Graphql 中的 find 来解析多条记录

Posted

技术标签:

【中文标题】如何使用带有 Mongoose 和 ES6 承诺的 Graphql 中的 find 来解析多条记录【英文标题】:How to resolve the multiple records using find in Graphql with Mongoose and ES6 promises 【发布时间】:2015-12-05 10:55:28 【问题描述】:

我最近开始使用 Graphql,当从数据库中找到多个具有条件的记录(如 find('author.id':id)) 时,我得到的响应为 NULL。在控制台中,所有记录都被打印出来,但是解决时响应显示为空。

我的代码如下:

 export default 
    eventByUserId: 
        type: new GraphQLList(EventType),
        args: 
          id: 
            type: GraphQLID
          
        ,
        resolve: (root, id) => 
      return new Promise((resolve, reject) => 
        Event.find('author.id': id).exec((err, res) => 
        console.log(res);
         err ? reject(err) : resolve(res);
        );
      );
    ;
   
  ;

通过类似的查询:

  
  eventByUserId 
    ( 
      id:"55dd69e702a488b81c4dd8ed" 

     )  
     
        title 
        description
        start
        mediaurl
        locationstate,city
        authorid, name
        commentstext,created,authorid,name
        postsurl,mediaType,imageUrl,note,authorid,name
        _id
      
    

回复如下:


    "data": 
        "eventByUserId": 
            "title": null,
            "description": null,
            "start": null,
            "media": null,
            "location": null,
            "author": null,
            "comments": null,
            "posts": null,
            "_id": null
        
    

这是我的 EventType:

export default new GraphQLObjectType(
  name: 'Event',
  description: 'A event',
  fields: () => (
       _id: 
      type: GraphQLString,
      description: 'The id of the event.',
    ,
    title: 
      type: GraphQLString,
      description: 'The title of the event.',
    ,
     description: 
      type: GraphQLString,
      description: 'The description of the event.',
    ,
    start: 
      type: GraphQLString,
      description: 'The start date of the event.',
    ,
    media:
      type:new GraphQLList(MediaType),
      description:'List of media.',   
    ,
    location:
      type:new GraphQLList(LocationType),
      description:' The list of location. ',   
    ,
    comments:
      type:new GraphQLList(CommentType),
      description:' The list of Comments. ',   
    ,
    posts:
      type:new GraphQLList(PostType),
      description:' The list of Posts. ',   
    ,
    created: 
      type: GraphQLString,
      description: 'The created at.',    
    ,
    author:
       type: AuthorType,
      description: 'The author for the event.',        
    
  )
);

【问题讨论】:

请出示电话。你到底从哪里得到null 你真的不应该混合使用 CommonJS 和 ES6 导出。 我不是用普通js只用es6 使用邮递员获取响应,我正在调用 eventByUserId。这就像在上面的查询中 你能不能也显示EventType的定义? 【参考方案1】:

在这种情况下,我们正在尝试解析数据列表,因此在 eventByUserId 中,我们必须将 GraphQLList 的类型设为 type:new GraphQLList(EventType) 来代替 type:EventType。我也在编辑我的帖子。谢谢你的支持。。

【讨论】:

能否通过提供代码示例更准确地回答您的问题?我有完全一样的问题。谢谢 @Sulliwane:请给我你的代码,我会检查一次。 感谢 Mahesh,我实际上通过使用 mongoose "findById" 解决了我的问题! 哦!!没关系。如果 GraphQL 有任何问题,请随时问我。

以上是关于如何使用带有 Mongoose 和 ES6 承诺的 Graphql 中的 find 来解析多条记录的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 async/await 的 mongoose 承诺

使用 Promises 处理 Mongoose 错误

未来所有模型实例的 Mongoose Save 方法的Sinon Mock(带有承诺)

带有 ES6 / Bluebird 承诺的对象方法

Mongoose:我如何避免回调地狱,同时允许对不返回承诺的 mongoose 方法进行存根?

如何承诺 Mongo/Mongoose 找到