首页功能(三表查询)

数据模型

回顾数据模型设计

回顾数据模型设计
现在需要修改数据模型
将blogs表中的userId与userRelations表中的followerId 关联

这样在首页中只需要知道userId就可通过userRelations知道followerId(我所有的关注人),然后通过followerId查blogs 得到我所有关注人的微博

修改数据模型(Blog关联UserRelation)

  1. 创建外键关系: db-model-index.js:db-model-index.js
  2. 同步到数据库:node src/db/sync.js
  3. 查看数据库:可以看到blogs表的外键关系中并没有我们添加的外键关系blogs表的外键关系
    • 原因:userId已经有自己的外键关系,mysql中无法创建2次外键关系
    • 但是!并不影响sequalize连表查询!sequalize中2个模型之间的外键关系已经创建成功!之前讲过,sequalize中2个模型之间的外键关系创建成功后会试图同步到mysqsl上,但如果同步不成功也不会影响sequalize进行连表/3表查询

“自己关注自己”

在首页应当显示 自己和关注人 的微博,但sequalize来操作这个会比较麻烦,如果在创建用户时就自己关注自己,则首页只需要查询关注人微博即可

  1. 【service层】创建用户时,调用同层user-relation中的addFollower函数=》设置自己关注自己: service-user.js:service-user.js
  2. 测试:注册zhangsan,可看到右侧关注列表、粉丝列表中出现了自己测试
  3. 使得粉丝、关注列表中不显示自己:到service下user-relation.js中,在获取粉丝列表的时候让userId不等于followerId才可查询,即增加筛选条件:service下user-relation.jsservice下user-relation.js
    • Sequelize自带的“不等于”的表示方法:[Sequelize.Op.ne]
      • Sequelize:引用自sequelize
      • Op:Option
      • ne:not equal(不等于)
      • []:symbol类型
  4. 测试:成功

回顾模板和路由设计

回顾模板和路由设计

首页右侧

模板代码

基本和个人主页右侧一样:在views-index.ejs中增添右侧代码views-index.ejs

页面路由

  1. 【页面路由返回前端右侧所需数据】在routes-view-blog.js首页路由使用和个人主页基本相似的代码返回数据routes-view-blog.js
  2. 测试:访问首页:访问首页

首页左侧(微博列表&加载更多)

模板代码

基本和个人主页一样:在views-index.ejs中增添代码views-index.ejs

开发路由(三表查询 微博首页列表第一页)

  1. 获取第一页数据:
  2. 【路由层】调用controller层getHomeBlogList函数,返回前端所需数据: routes-view-blog.js,首页路由中:routes-view-blog.js
  3. 【controller层】创建getHomeBlogList函数=》调用service层getFollowersBlogList函数=》获取首页微博列表: controller下blog-home.js:controller下blog-home.js
  4. 【service层】创建getFollowersBlogList函数=》三表查询: service-blog.js,service-blog.jsservice-blog.js
    • 回顾外键关系:外键关系应当从Blog为主开始查询
    • 三表查询的结果是3个表的内容:三表查询的结果节选但是最后格式化数据时只格式化Blog和User的内容,虽然3表数据都返回了,但前端只拿了Blog和User的内容来使用
  5. 测试:访问首页:访问首页发布微博后首页:首页进入zhangsan帐号,发布微博,回到lisi帐号首页:lisi帐号首页

开发路由(加载更多 渲染模板)

  1. 【路由层】:除了多需要一个id以及获取的是三表查询的数据以外,和广场页的基本一致,routes-api下blog-home.js:routes-api下blog-home.js
  2. 测试:点击“加载更多”,成功
,