代码之家  ›  专栏  ›  技术社区  ›  Johan Rin

mongoose级别的快速加入应用程序超时

  •  0
  • Johan Rin  · 技术社区  · 6 年前

    两个文档之间的应用程序级连接超时:线程和消息。

    我正在努力 收到我的所有留言 使用此代码:

    router.get('/:themeId/threads/:threadId/messages', function(req, res, next) {
      Thread.findById(req.params.threadId, function(err, thread) {
        if (err) return next(err);
    
        Message.find({ _id: { $in: thread.messages } }), function(err, message) {
          if (err) return next(err);
          res.json(message);
        }
      });
    });
    

    不幸的是,我的请求超时了,我测试了邮递员。 我在测试的时候有这样的信息:

    无法得到任何响应

    http://localhost:3000/api/themes/5b1bb59d4210c50cf798da57/threads/5b1bb5e84210c50cf798da59/messages .

    我也查过了 thread.messages 是具有另一个请求的数组:

    得到 http://localhost:3000/api/themes/5b1bb59d4210c50cf798da57/threads/5b1bb5e84210c50cf798da59 :

    Thread 文件:

    {
        "numberOfViews": 0,
        "numberOfComments": 0,
        "numberOfLikes": 0,
        "numberOfThanks": 0,
        "messages": [
            "5b1bb5ad4210c50cf798da58",
            "5b1bb6464210c50cf798da5a"
        ],
        "_id": "5b1bb5e84210c50cf798da59",
        "theme": "5b1bb59d4210c50cf798da57",
        "title": "Title azerty",
        "createdAt": "2018-06-09T11:11:36.358Z",
        "updatedAt": "2018-06-09T11:13:41.062Z",
        "__v": 1
    } 
    

    据我所知,我的请求应该 ... 但我好像错过了什么。

    有什么办法解决我的超时请求吗?

    2 回复  |  直到 6 年前
        1
  •  0
  •   shmit    6 年前

    有几个建议可以尝试:

    1. 确保线程消息不是空数组。可以通过断言它的长度大于0来实现这一点。

    var myobj1 = [];
    
    thread.messages.forEach(element => {myobj1.push(Mongoose.Types.ObjectId(element)})
        2
  •  0
  •   Johan Rin    6 年前

    我找到了一个解决方法 填充 猫鼬和这些来源:

    1. http://mongoosejs.com/docs/populate.html
    2. https://alexanderzeitler.com/articles/mongoose-referencing-schema-in-properties-and-arrays/

        router.get('/:themeId/threads/:threadId/messages', function(req, res, next) {
          Thread.findById(req.params.threadId, function(err, thread) {
            if (err) return next(err);
    
            Message.find({_id: { $in : thread.messages } } )
              .populate('messages')
              .exec(function(error, messages) {
                res.json(messages);
              });
          });
        });