上一篇文章将内容修改与内容删除完成,只剩下评论的分页和阅读全文。一个简单博客就完成了。当点击阅读全文时通过get方式将所点击的文章id值在地址栏传送给后台。后台通过let contentId = req.query.contentId;将值赋值。获得了文章的id值通过对数据库的查询就可以获得文章的全部信息,然后通过回调函数将值传给前台。在查询数据库是时要为文章阅读量设置对应的函数content.views++;这样每一次点击阅读全文就可以获得最新的阅读量。设置完成后保存在数据库里这时就可以render给前台了。
前台在获取到后台传过来的值时就可以在视图里将每一个值放在对应的为位置里。在数据库查询时会用到关联字段。通过一个库可以和另外一个库联系起来,共同展现在页面之中。在展现添加文本的时间时,最开始的时间是一个不利于阅读的字符串吧,所以在前台展现时需要使用content.time.toLocaleString()对时间进行处理。这样不仅方便美观,也会让用户更加浅显易懂。
评论是很关键一个部件,但在评论之前需要一个条件,只有在用户登陆时才能进行评论,如过没有登陆就会弹出一个提示,提示用户只有登陆才可以进行本次操作。在点击品论提交时判断登陆与否,在前面的文章里讲过只要有用户登陆就设置cookie值,这时就只需要判断 if(!req.userInfo)是否能执行。验证完成后就可以进行评论添加了。但是只有一句话作为评论显然是不够的,所以我们要对品论的结构进行设置,添加上品论的时间、是谁评论的。
设置完品论的格式后通过id查询数据库该文章的数据,然后通过then函数将获得的评论push到评论数组中去,添加完成后立马保存在数据库中去。在保存时的回调函数里通过res.send(contents.comment);将最新的文章信息发送给前台。在前台里的ajax里的success里将值接收到。后台给前台的数据需要使用comments = JSON.parse(msg).reverse();将值变成可以使用的对象。并且使用reverse将最新的评论放在前面。提高用户的体验效果。
如果前台接收到的数据过去庞大,所有的评论不能在一张页面展现完。这时就需要为所有的评论做分页。前台的分页与后台的分页有着异曲同工之处。设置记录当前页面的值page,规定每一页显示数据条数的值limit。通过for循环将值按当前的页数展现在页面之中。还需要注意pade的值最小不能小于1,page最大的值不能大于数据length/limit。
获取到页面中的上一页,下一页标签进行评论页面的跳转。当点击上一页时page++,下一页page--。在加减的同时执行renderComment对数据进行改变。但还有一个细节需要思考,点击进入全文时,开始是没有一个评论的,只有点击评论时才会刷新页面出现评论。所以我们在点击全文进入页面时就需要向后台发出请求,使用get方式将文章的标题发送给后台。后台通过标题查询将文章所有的评论发送给前台。当前台获得数据时调用renderComment函数将值直接展现在页面中。