Тайм-аут соединения на уровне приложения в мангуст с экспресс - PullRequest
0 голосов
/ 09 июня 2018

У меня есть тайм-аут с моим соединением на уровне приложения между двумя документами: Нить и Сообщение.

Я пытаюсь получить все Сообщения моей Нити с этим кодом:

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 является массивом с другим запросом:

GET 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
} 

Насколько я понимаю, мой запрос должен найти сообщение в моем массиве Thread.messages ... Но, похоже, я что-то упускаю.

Любая идея, чтобы решить моюзапрос на тайм-аут?

Большое спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Я нашел решение с населением Мангуста и источниками тезисов:

  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);
          });
      });
    });
0 голосов
/ 09 июня 2018

Несколько предложений, чтобы попробовать:

  1. Убедитесь, что thread.messages не является пустым массивом.Вы можете сделать это, утверждая, что его длина больше 0.
  2. В предложении Message.find ({_id: {$ in: thread.messages}}) приведите строковые значения к объектам перед тем, как отправлятьэто к пункту поиска.Так что вы можете сделать

var myobj1 = [];

thread.messages.forEach(element => {myobj1.push(Mongoose.Types.ObjectId(element)})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...