node+sequelize实现楼中楼思路

微信扫一扫,分享到朋友圈

node+sequelize实现楼中楼思路

引言

不知道为啥sequelize没火起来,有一次在慕课网上看到一个关于讲sequelize的视频,感觉用起来肥肠的方便啊,可是项目中遇到好多问题,网上可参考的文档太少了,中间遇到非常多的坑,不过总算做出来了,下面这个项目是一个简易的类似微博评论功能(没有实现分页功能),不过还有些细节需要优化,下面先上图

主页面

提问弹窗

详情界面

情景就是以上情景,那么我们直接进入正题,先看一看数据库表之间的关系,我在数据库中建立了三张表,分别是问题表Questions,评论回复的人员表Consumers,评论回复表Comment,那么我们一一介绍一下各个表并且看一下里面的字段

问题表

评论回复的人员表(每次提问或者回复都会根据当前登陆人在表中创建一个用户名)

评论回复表

这个表设置了pid和replyid,其中pid是用来分级展示(一级评论,二级评论),replyid表示回复的那一条,如果直接对文章发表评论那么pid和replyid都为0,如果直接对一级评论回复那么pid和replyid均为一级评论的id,如果是对楼中楼进行回复那么pid为一级评论的id,replyid为你回复的id

数据库的初始化

1.创建一个数据库(这里我们创建了一个todo_development)

2.使用‘sequelize cli’ 初始化项目的数据库配置信息

创建一个db的文件夹 (mkdir db)进入到文件夹执行

npx sequelize init

3.在config中加入 “timezone”:”+08:00″//中国时间

4.在config中修改database对应我们的todo_development数据库名称

5.生成模型文件,例如创建问题表执行以下操作(其余两张表都这么创建)

npx sequelize model:generate --name Questions --attributes title:string,createTime:date,content:string

6.持久化,模型对应的【数据库表】,然后再打开Navicat就会多出一张问题表
npx sequelize db:migrate

7.在这里我们会自动生成两个字段(创建时间和修改时间) 我们不需要就在migrate删掉,

然后在models中加入timestamps:false

定义表关系

上面的表我们也看到了创建评论表(Comments)的时候多创建一个QuestionId用来关联对应的问题的,在models中添加以下代码(图一)用来连接Questions表,而问题表也需要和评论表进行包含关系,这里一个问题可以包含多个评论所以我们使用 hasMany (图二)

图一

图二

而提问的人只能有一个所以问题表只关联一个用户使用
hasOne (图一),评论的人也是只有相对的用户进行评论所以也使用
hasOne

图一

图二

评论回复人员表中只需要连接评论表和问题表即可

这样我们三张表中的关系就定义完成了

微信扫一扫,分享到朋友圈

node+sequelize实现楼中楼思路

你凭什么让用户掏钱?全面解析VIP订阅模式

上一篇

科学家编制天体目录:寻找外星人最可能的藏身之所

下一篇

你也可能喜欢

node+sequelize实现楼中楼思路

长按储存图像,分享给朋友