我在两个文档之间的应用程序级连接超时:线程和消息。
我正在尝试用以下代码获取我的线程的所有消息:
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);
}
});
});
不幸的是,我的请求超时,我测试了Postman。 我测试时收到了这条消息:
无法得到任何回复
连接时出错 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
}
根据我的理解,我的请求应该在我的Thread.messages数组中找到查找消息 ... 但似乎我错过了一些东西。
有什么想法解决我的超时请求吗?
非常感谢你的帮助。
答案 0 :(得分:0)
尝试一些建议:
var myobj1 = [];
thread.messages.forEach(element => {myobj1.push(Mongoose.Types.ObjectId(element)})
答案 1 :(得分:0)
我找到了一个使用Mongoose的 填充 的解决方案及其来源:
修改后的代码:
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);
});
});
});