代码
post-content.ejs
修改views/components/post-content.ejs,在浏览下面添加留言:
<span>留言(<%= post.commentsCount %>)</span>
posts.schema.ts
修改src/posts/posts.schema.ts,添加一个commentsCount属性:
model.ts
修改src/model.ts,修改findMany方法,支持$in语法来使用数组进行查找。
type SimpleType = string | number | boolean;
type FindManyOptions<U> = {
[K in keyof U]?: SimpleType | {
$in: SimpleType[];
};
};
async findMany(
options: FindManyOptions<U>,
): Promise<U[]> {
const docs = await this.findAll();
return docs.filter((doc: any) => {
return Object.keys(options).every((key) => {
const k = key as keyof U;
const opv = options[k];
if (typeof opv === "object" && opv.$in) {
return opv.$in.includes(doc[key]);
} else {
return doc[key] === opv;
}
});
});
}
comments.service.ts
src/comments/comments.service.ts,增加findByPostIds方法:
findByPostIds(postIds: string[]) {
return this.model.findMany({
postId: {
$in: postIds,
},
});
}
posts.service.ts
修改src/posts/posts.service.ts,findById增加一句:
formatPosts方法增加一段:
if (options.isWithComments) {
const comments = await this.commentsService.findByPostIds(
posts.map((post) => post.id),
);
posts.forEach((post) => {
post.comments = comments.filter((comment) => comment.postId === post.id);
post.commentsCount = post.comments.length;
});
}
posts.controller.ts
修改src/posts/posts.controller.ts的getAll,增加一个参数:
验证
在博客下多加几条评论。
某篇博客效果:
所有博客效果:
作业
还差最后一步,我们的博客系统就基本完成了。
我们的错误信息是直接以字符串的形势返回的,我们可以提供一个错误页面。