数据模型
回顾数据模型设计
现在需要修改数据模型:
将blogs表中的userId与userRelations表中的followerId 关联。
这样在首页中只需要知道userId就可通过userRelations知道followerId(我所有的关注人),然后通过followerId查blogs 得到我所有关注人的微博
修改数据模型(Blog关联UserRelation)
- 创建外键关系: db-model-index.js:
- 同步到数据库:
node src/db/sync.js
- 查看数据库:可以看到blogs表的外键关系中并没有我们添加的外键关系:
- 原因:userId已经有自己的外键关系,mysql中无法创建2次外键关系
- 但是!并不影响sequalize连表查询!sequalize中2个模型之间的外键关系已经创建成功!之前讲过,sequalize中2个模型之间的外键关系创建成功后会试图同步到mysqsl上,但如果同步不成功也不会影响sequalize进行连表/3表查询
“自己关注自己”
在首页应当显示 自己和关注人 的微博,但sequalize来操作这个会比较麻烦,如果在创建用户时就自己关注自己,则首页只需要查询关注人微博即可
- 【service层】创建用户时,调用同层user-relation中的addFollower函数=》设置自己关注自己: service-user.js:
- 测试:注册zhangsan,可看到右侧关注列表、粉丝列表中出现了自己:
- 使得粉丝、关注列表中不显示自己:到service下user-relation.js中,在获取粉丝列表的时候让userId不等于followerId才可查询,即增加筛选条件:
- Sequelize自带的“不等于”的表示方法:
[Sequelize.Op.ne]
Sequelize
:引用自sequelizeOp
:Optionne
:not equal(不等于)[]
:symbol类型
- Sequelize自带的“不等于”的表示方法:
- 测试:成功
回顾模板和路由设计
首页右侧
模板代码
基本和个人主页右侧一样:在views-index.ejs中增添右侧代码:
页面路由
- 【页面路由返回前端右侧所需数据】在routes-view-blog.js首页路由中使用和个人主页基本相似的代码返回数据:
- 测试:访问首页:
首页左侧(微博列表&加载更多)
模板代码
基本和个人主页一样:在views-index.ejs中增添代码:
开发路由(三表查询 微博首页列表第一页)
- 获取第一页数据:
- 【路由层】调用controller层getHomeBlogList函数,返回前端所需数据: routes-view-blog.js,首页路由中:
- 【controller层】创建getHomeBlogList函数=》调用service层getFollowersBlogList函数=》获取首页微博列表: controller下blog-home.js:
- 【service层】创建getFollowersBlogList函数=》三表查询: service-blog.js,
- 回顾外键关系:应当从Blog为主开始查询
- 三表查询的结果是3个表的内容::但是最后格式化数据时只格式化Blog和User的内容,虽然3表数据都返回了,但前端只拿了Blog和User的内容来使用
- 测试:访问首页:发布微博后首页:进入zhangsan帐号,发布微博,回到lisi帐号首页:
开发路由(加载更多 渲染模板)
- 【路由层】:除了多需要一个id以及获取的是三表查询的数据以外,和广场页的基本一致,routes-api下blog-home.js:
- 测试:点击“加载更多”,成功