在Web开发中,有很多常见的功能,例如用户关注。这项功能常常用在社交网站和博客网站上,让用户可以关注其他用户或关注自己感兴趣的话题。在本文中,我们将使用 Sequelize ORM 来实现用户关注功能。
什么是 Sequelize?
Sequelize 是一个 Node.js 的 ORM 库,它支持多种数据库,包括 MySQL、PostgreSQL、SQLite 和 MSSQL 等。ORM (Object-Relational Mapping)是一种面向对象的数据库操作方法,将关系数据库的表映射为类,将行映射为对象,从而实现对关系数据库的 CRUD 操作。
数据库设计
在实现用户关注功能之前,我们需要设计数据库表结构。在本文中,我们将使用 MySQL 数据库,并创建三个表:
- User 表:存储用户信息,包括用户名和密码等。
- Follow 表:存储用户关注关系,每个记录代表一条“用户A关注了用户B”的记录。
- Post 表:存储文章信息,每篇文章都有一个作者。
下面是表结构设计:
-- -------------------- ---- ------- ------ ----- ------- - ---- ------- --- ---- --------------- ---------- ------------ --- ----- ---------- ------------ --- ----- ------- --- ------ - ------------- ------- ---------------- ------ ----- --------- - ---- ------- --- ---- --------------- ------------ ------- --- ----- ------------ ------- --- ----- ------- --- ------- ------ --- --------------- --------------------------- - ------------- ------- ---------------- ------ ----- ------- - ---- ------- --- ---- --------------- ------- ------------ --- ----- --------- ---- --- ----- ---------- ------- --- ----- ------- --- ------ - ------------- ------- ----------------
模型定义
在 Sequelize 中,模型定义文件通常存放在 models 目录下。我们需要定义 User、Follow 和 Post 三个模型。
User 模型
-- -------------------- ---- ------- -- -------------- ----- - ------ --------- - - --------------------- ----- --------- - ----------------- ----- ---- ------- ----- -- ----------- --------- ----------------- --------- ---------------- -- - ---------- ---------- ------ --- -------------- - -----
Follow 模型
-- -------------------- ---- ------- -- ---------------- ----- - ------ --------- - - --------------------- ----- --------- - ----------------- ----- ------ ------- ----- -- ------------- ----------- ------------------ ----------- ----------------- -- - ---------- ---------- -------- --- -------------- - -------
Post 模型
-- -------------------- ---- ------- -- -------------- ----- - ------ --------- - - --------------------- ----- --------- - ----------------- ----- ---- - ------------------ ----- ---- ------- ----- -- ----------- ------ ----------------- -------- -------------- -- - ---------- ---------- ------ --- -------------------- - ----------- ----------- ---------- ---- --- -------------- - -----
在 Post 模型中,我们将其与 User 模型进行关联,使用 belongsTo
方法。这可以帮助我们方便地查询文章的作者。
关注功能实现
现在,我们已经定义好了用户表和关注表。接下来,我们需要实现对应的功能——用户关注。
用户关注
假设用户A想关注用户B,他需要点击一个“关注”按钮。这时,我们需要在 Follow 表中创建一条记录,表示“用户A关注了用户B”。
-- -------------------- ---- ------- -- ---------------- ----- ------- - ------------------- ----- ------ - ----------------- ----- ---- - -------------------------- ----- ------ - ---------------------------- ---------------- ----- ----- ---- -- - ----- - ----------- ---------- - - --------- --- - ----- --------------- ----------- ---------- --- -------------------- - ----- ------- - ------------------- -------------------- - --- -------------- - -------
在 POST /follow
接口中,我们接收到请求后,创建一个 Follow 模型的实例,并调用 create
方法,将数据保存到数据库中。请注意,我们在 Follow 表的 followerId
和 followedId
列上都建立了唯一索引,这是为了防止用户重复关注同一个人,或者重复取消关注。
用户取关
假设用户A不再想关注用户B,他需要点击一个“取消关注”按钮。这时,我们需要在 Follow 表中删除一条记录,表示“用户A取消关注了用户B”。
-- -------------------- ---- ------- -- ---------------- ------------------ ----- ----- ---- -- - ----- - ----------- ---------- - - --------- --- - ----- ---------------- ------ - ----------- ---------- - --- -------------------- - ----- ------- - ------------------- -------------------- - ---
在 DELETE /follow
接口中,我们接收到请求后,使用 destroy
方法删除数据库中的记录。
查询关注列表
假设用户A想查看自己关注的用户,我们需要查询 Follow 表中所有被当前用户关注的记录,然后再从 User 表中查询出对应的用户信息。
-- -------------------- ---- ------- -- ---------------- ---------------------- ----- ----- ---- -- - ----- ------ - ------------------ --- - ----- ---------- - ----- ---------------- ------ - ----------- ------ -- ----------- --- -------- -- ------ ----- --- --------------- ----------- ------ ----------- -- --- ------------------------------ -- ---------------------- - ----- ------- - ------------------- -------------------- - ---
在 GET /follow/:userId
接口中,我们使用 findAll
方法查询 Follow 表。使用 where
参数查询出被当前用户关注的记录,使用 include
参数关联 User 表,并设定其别名为 followedUser
,最后,使用 map
方法将查询结果转换为一个包含关注用户信息的数组,并将其返回。
总结
在本文中,我们使用 Sequelize ORM 实现了用户关注功能。我们首先设计了数据库表结构,并定义了三个模型:User、Follow 和 Post。然后,我们实现了关注、取关和查询关注列表三个功能。通过本文的实践,读者可以更好地掌握 Sequelize ORM 的使用方法,同时也可以借此学习如何实现常见的 Web 开发功能。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646195e7968c7c53b02f0b50