用户登录

下面我们去改造一下内容列表接口的功能,让它可以找出某个用户赞过的内容。打开 src/post/post.middleware,在这个文件里找到之前创建的 filter 这个中间件。 复制一份这个过滤出用户发布的内容,这里要过滤出用户赞过的内容。

修改一下判断的条件,如果客户端在使用内容列表接口的时候,设置了 user 还有 action 查询符,这个 action 查询符的值等于 liked ,并且没有设置 tag 查询符。这种情况就是要找出用户赞过的内容。

设置一下 request 上的 filter 属性的值,name 可以设置成 userLiked,这是给这种过滤条件起的一个名字,等会儿我们会在内容列表查询里用到这个名字。

sql 是要用在查询里的过滤条件,条件就是 user_like_post.userId 等于一个指定的值,先用一个占位符。param 是查询里的占位符的具体的值。这里设置成 user,这个 user 就是在客户端通过 user 这个查询符设置成的一个用户的 id。

然后打开 post.provider,在查询片断里面里要定义一个新的查询片断,起个名字叫 innerJoinUserLikePost,这个查询片断可以拼接 user_like_post 数据表。INNER JOIN user_like_post, ON 条件是 user_like_post.postId 等于 post 数据表里的 id。

再打开 post.service,在这个文件里找到定义的 getPosts,这个函数的作用就是在数据仓库里找出一组内容,在这个函数准备的查询里面,要加上刚才定义的那个查询片断,不过要先判断一个条件,条件是 filter 里的 name 属性的值,等于 userLiked,说明要找出某个用户赞过的内容列表,这种情况下我们就需要在查询里加上 sqlFragment 里的 innerJoinUserLikePost 这个查询片断,用它拼接 user_like_post 这个数据表,这样才能使用这个表里的 userId 栏目的值作为这段查询里的过滤条件。

复制一下这行代码,再找到在这个文件里定义的这个 getPostsTotalCount,这个函数会统计内容列表的内容项目的数量。在这个函数准备的查询里面,也要判断 filter.name 决定是否要在查询里加入 innerJoinUserLikePost 这个查询片断。

在 HTTP 客户端测试一下,打开 内容列表 请求,修改一下请求的地址,在地址里加上 user 这个查询符,它的值是一个用户的 id,然后再加上一个 action 查询符,把它的值设置成 liked 。 这个请求的意思就是找出 id=6 的这个用户赞过的内容。 发送一下这个请求。

得到的内容列表里面都是 id=6 的这个用户赞过的内容。 打开 Header 选项卡,观察一下这个 X-Total-Count,它的值是 2,说明 id=6 的这个用户赞过两个内容。这两个内容,一个 id=2, 一个是 id=1 。

可以在数据库客户端再观察一下,打开 user_like_post,在这个表里你会发现,有两条记录它们的 userId 的值是 6,对应的 postId 一个是 1 一个是 2。

这里可以再手工添加一条记录,userId 的值等于 6,postId 的值记它等于 3 。 保存一下。

回到 HTTP 客户端,再发送一下这个内容列表请求。 这回你会发现 id=6 的这个用户赞过的内容列表里面,第一个内容项目的 id=3 。

因为这个内容列表会分页显示,我们之前设置过一页上面可以有两个内容项目,要查看其它页面的内容,可以在请求地址里面,加上一个 page 查询符,把它的值设置成 2,这样就会得到第二页的内容项目。

再打开 Header 选项卡,这里显示 X-Total-Count 的值是 3,说明 id=6 的这个用户一共赞过 3 个内容。

用户赞过的内容列表《 Node.js 服务端应用开发:用户点赞 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点