音符·代码·脑洞

不想当程序员的歌手不是好指挥。

0%

建站计划:实现简易评论系统【设计篇】

Ghost博客系统并没有内置的评论功能。评论虽然不是特别必须,但能够在自己文章后看到别人的反馈,对文章作者来说真的很有帮助。

用什么来做评论系统呢?

一开始,我的思路是使用免后台的评论系统。这类系统的原理是,服务器、评论接口都是别人提供的,有的甚至提供了前端界面,只需在自己的blog里引用相关代码即可使用。虽然很方便,但是依赖第三方的服务,总感觉不那么可靠。并且,数据都存储在别人那里,万一造成个人信息泄露可就不好了。

还是在自己的服务器上搭一个比较保险,这样万一服务器挂了,评论系统用不了的同时也没人能访问blog,不会有人想评论评论不了(Emmm……)

于是我把目光投向了开源评论/论坛系统。不过查了一圈资料发现,这些系统功能都太全了,所有论坛有的功能都有,用开源系统做博客评论后台有点大材小用。

所以,还是自己来实现一个吧!很久不写代码,有点生疏,正好来复习一下。

需求分析

首先,当然是要确定自己想要的功能。因为是自己用,所以能简化就简化,只做一个最简的评论系统就可以了,如果需要其他功能可以慢慢添加。

  • 部分文章、部分的页面(如留言板页面)需要能够查看、发表和回复评论
  • 不打算有登录系统,所以想简单地让用户自己输入名字和邮箱进行评论
  • 防止恶意评论、机器人,想加一个验证码验证(直接用谷歌验证就好)

看起来很简单对不对,所以我们也用最简单的思路来实现吧!

数据表设计一律从简!

我觉得,数据库的部分,只需要一个记录评论的表就可以了,怎么简单怎么来。

  • 每条评论肯定都要记录:id,用户名,用户邮箱,评论内容,评论时间等。

  • 同时还需要一个字段用来区分评论的是哪篇文章/页面,最好使用文章/页面的id来做区分,因为文章的url是会变化的。

  • 想要二级回复的功能,所以每条评论要记录回复的是哪条评论,也就是父级评论的id。

总结一下:

列名 数据格式 说明
id int 自增id
appid int 用来区分文章和页面,如ghost-post,ghost-page
uniqueid varchar(100) 页面id
username varchar(20) 显示的用户名
email varchar(100) 邮箱
website varchar(100) 网站,非必填
comment varchar(200) 评论的内容
created_at timestamp 评论时间
parent_id int 回复的评论id,非必填

接口设计

  1. 通过博文的id,查询对应的评论列表
  2. 添加评论和回复评论
  3. 后台查看所有评论
  4. 后台删除评论

后两条也暂时不是很想做,毕竟应该不会一下有很多人来我的网站评论,想删评论不如数据库直接删……

框架选择:koa+sequelize

选择koajs用来处理网络请求,选它只是因为比较熟悉用的顺手;sequelize用来操作数据库,简单直接~

这就是最终的设计了,感觉有点太简易了。不过没关系,因为逻辑比较简单,我也打算把整个实现的过程比较详细的记录一下,弄一个系列文章。等这个系列完结的时候,我的blog就会有评论功能了XD