nodejs评论分页之见解(白银) yxl 2018-11-09 11:37:57 288文章目录 近期做一个小项目,其中在做有关文章的评论以及回复的功能时,开始做的时候,没有考虑太多的因素。评论和回复都放在一张表处理,可能后导致数据庞大了,不好维护。 ##### 表设计 DROP TABLE IF EXISTS `comment`; CREATE TABLE `comment` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `article_id` int(11) NOT NULL, `author` varchar(255) CHARACTER SET utf8 NOT NULL, `email` varchar(255) CHARACTER SET utf8 NOT NULL, `url` varchar(255) CHARACTER SET utf8 NOT NULL, `ip` varchar(255) CHARACTER SET utf8 NOT NULL, `agent` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT 'user-agent', `text` varchar(255) CHARACTER SET utf8 NOT NULL COMMENT '评论内容', `parent_id` int(11) NOT NULL COMMENT '回复的父级id', `create_time` varchar(255) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=101 DEFAULT CHARSET=utf8mb4; ##### 问题重现 然后直接查出对应文章的评论 let list = await commentModel.where({ article_id:articleId,parent_id:0 }).page(page, 10).order('create_time DESC').countSelect(); 然后对查出来的数据做递归 let newCommonList = this.model('article').getCommonList(list, 0); getCommonList(data, pid) { let arr = []; data.forEach(item => { if (item['parent_id'] == pid) { item['child'] = this.getCommonList(data, item['id']); arr.push(item); } }) return arr; } 这样做的问题是什么呢?分页对不上,查出来的时候分页已经出来了,然后你对数组做了处理,数据就少了,所以导致分页出现了错误。 ##### 解决方法一 //先查主的 比如 parent_id = 0 let list = await commentModel.where({ article_id:articleId,parent_id:0 }).page(page, 10).order('create_time DESC').countSelect(); 然后查parent_id !=0 的回复,然后递归处理子类 let listData = list.data; let chidlList = await commentModel.where({ article_id:articleId,parent_id:['!=', 0] }).order('create_time DESC').select() //这里递归处理了子级 for ( let item in listData){ let child = []; child = this.getCommonList(chidlList,listData[item].id) listData[item].child = child; } 这样是解决了刚才那个问题,但是感觉这种方式对性能有影响,要递归处理回复数据,所以回复层级越少越好,最好二级回复 还有更多的解决方案,待探讨Tags: nodejs您觉得不错,可以分享到:关于本站凡本站注明"本站"或"投稿"的所有文章,版权均属于本站或投稿人,未经本站授权不得转载、摘编或利用其它方式使用上述作品。关于作者__construct幸福不会遗漏为之付出的人 上一篇文章react学习之表单下一篇文章 兼容ios和安卓的复制相关文章nodejs 图片base64处理和request请求处理