У меня есть маршрут к комментариям, где я хочу получить все комментарии для определенного регистра №. Опять же, для каждого комментария может быть несколько файлов. Я хочу получить их все синхронно, тогда как с nodeJS по умолчанию он работает асинхронно. Комментарии и файлы хранятся в разных коллекциях.
Это маршрут, по которому я хочу вернуть результат как один объект JS
router.get("/history/:docket_no", (req, res) => {
Comments.find({ docket_no: req.params.docket_no })
.exec()
.then(comments => {
var cmnts = [];
if (comments.length >= 1) {
for(var i = 0; i < comments.length; i++) {
var cmntImgs = [];
CommentImage.find({ comment_id: comments[i]._id })
.exec()
.then(commentImages => {
for(var j = 0; j < commentImages.length; j++) {
var filePath = commentImages[j].comment_image;
var fileName = filePath.split("\\");
cmntImgs[j] = {
filesName: fileName[fileName.length-1],
filePath: filePath
};
}
console.log('Images',cmntImgs);
})
.catch(err => {
console.error(err);
});
cmnts[i] = {
id: comments[i]._id,
user_name: comments[i].user_name,
role_id: comments[i].role_id,
message: comments[i].message,
create_date: comments[i].create_date,
files: cmntImgs
};
};
return res.status(200).json({
comments: cmnts
});
} else {
return res.status(400).json({
msg: "No comments found"
});
}
})
.catch(err => {
console.error(err);
res.send(500).json({
msg: "Error"
});
});
});
Это схема комментариев ...
const mongoose = require("mongoose");
//Comments Schema
const CommentsSchema = mongoose.Schema({
docket_no: {
type: String,
trim: true,
required: true
},
user_name: {
type: String,
required: true
},
role_id: {
type: Number,
required: true
},
message: {
type: String,
trim: true,
required: true
},
create_date: {
type: Date,
default: Date.now,
required: true
}
});
module.exports = mongoose.model("Comments", CommentsSchema);
Это схема файлов ...
const mongoose = require("mongoose");
//CommentImage Schema
const CommentImage = mongoose.Schema({
docket_no: {
type: String,
trim: true,
required: true
},
comment_id: {
type: String,
trim: true,
required: true
},
comment_image: {
type: String,
trim: true,
required: true
}
});
module.exports = mongoose.model("CommentImage", CommentImage);
Это токовый выход-
{
"comments": [
{
"id": "5c3efdf77ad5e5176cc65bc4",
"user_name": "aaa",
"role_id": 1,
"message": "comment test 1",
"create_date": "2019-01-16T09:48:39.023Z",
"files": []
},
{
"id": "5c40311bdad6ad1084d24b9c",
"user_name": "aaa",
"role_id": 1,
"message": "comment test 1",
"create_date": "2019-01-17T07:39:07.081Z",
"files": []
}
]
}
Желаемый вывод-
{
"comments": [
{
"id": "5c3efdf77ad5e5176cc65bc4",
"user_name": "aaa",
"role_id": 1,
"message": "comment test 1",
"create_date": "2019-01-16T09:48:39.023Z",
"files": []
},
{
"id": "5c40311bdad6ad1084d24b9c",
"user_name": "aaa",
"role_id": 1,
"message": "comment test 1",
"create_date": "2019-01-17T07:39:07.081Z",
"files": [
{
filesName: '1547710746976-FD Direct Screen #2.jpg',
filePath: 'uploads\\1547710746976-FD Direct Screen #2.jpg' },
{
filesName: '1547710746987-New Doc 2018-05-31.doc',
filePath: 'uploads\\1547710746987-New Doc 2018-05-31.doc' },
{
filesName: '1547710747024-New Doc 2018-05-31.docx',
filePath: 'uploads\\1547710747024-New Doc 2018-05-31.docx' },
{
filesName: '1547710747053-New Doc 2018-05-31.pdf',
filePath: 'uploads\\1547710747053-New Doc 2018-05-31.pdf' }
]
}
]
}