15-码路博客《其它补充》
码路教育 7/25/2022
# 1. 获取某个文章下的所有评论,带上回复
创建对应的控制器,如下:
// controller/CommentController
// 下面两个方法用于一个文章下的所有评论
static async getTargetComment(ctx, next) {
const commentList = await CommentController.targetComment(ctx.query);
ctx.status = 200;
ctx.body = res.json(commentList);
}
static async targetComment(params = {}) {
// target_id: 文章id
const {
target_id,
pageIndex = 1,
pageSize = 4
} = params;
// 评论总数量
const totalSize = await CommentModel.find({
target_id,
}).countDocuments();
// 获取所有的评论
const commentList = await CommentModel.find({
target_id,
})
.skip(parseInt(pageIndex - 1) * parseInt(pageSize))
.limit(parseInt(pageSize))
.sort({
_id: -1,
})
.lean();
// 2.获取评论下回复列表
// Promise.all()
let newCommentList = await Promise.all(
commentList.map(async (comment) => {
let replyList = await ReplyModel.find({
comment_id: comment._id,
});
comment.replyList = replyList;
return comment;
})
);
return {
data: newCommentList,
pageIndex: parseInt(pageIndex),
pageSize: parseInt(pageSize),
totalSize,
};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
对应的路由,如下:
// router/comment.js
// 获取文章目标的评论接口(带回复和分页)
router.get("/comment/target/list", CommentController.getTargetComment);
1
2
3
4
2
3
4
自行在postman中测试
# 2. 获取某个文章下的所有评论,带上回复
const CommentController = require("./CommentController");
// 获取文章详情
static async getArticleDetailById(ctx, next) {
const _id = ctx.params._id;
// 文章详情的内容
const articleDetail = await ArticleModel.findById({
_id
}).populate(
"category_id"
);
if (!articleDetail) throw new global.errs.NotFound("没有找到相关分类");
// 更新文章浏览器数 browse
await ArticleModel.findByIdAndUpdate({
_id
}, {
browse: ++articleDetail.browse
});
const {
data,
pageIndex,
pageSize,
totalSize
} =
await CommentController.targetComment({
target_id: articleDetail._id
});
ctx.body = res.json({
articleDetail,
commentList: data,
pageIndex,
pageSize,
commentCount: totalSize,
totalSize,
});
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
自行在postman中测试