下面我们要给评论列表添加一个分页功能,先打开项目里的 .env 这个文件,在里面添加一个环境新的变量,名字是 COMMENTS_PER_PAGE ,把它的值设置成 2,这个环境变量的值就是每页需要的评论数量。
然后再去准备一个配置,打开 app.config ,可以直接复制一下这个文件里的 内容分页这个配置, 准备一个评论分页的配置。名字改成 COMMENTS_PER_PAGE ,它的值就是把 COMMENTS_PER_PAGE 这个环境变量转换成数字之后得到的值。
打开 comment.router,在文件顶部要导入一些东西,先导入 paginate ,它来自上一级目录 post 里的 post.middleware。 然后导入 COMMENTS_PER_PAGE 这个配置,来自上一级目录 app 下面的 app.config。
找到 评论列表 接口,在接口上添加一个 paginate,执行一下这个函数,把每页的评论数量交给它,这里就是 COMMENTS_PER_PAGE。这个函数会制造出来一个中间件。
再打开 comment.controller,找到评论接口处理器,就是这个 index,修改一下在里面使用的 getComments ,给它一个 pagination 属性,对应的值设置成 request 上的 pagination 。
这里会提示 getComments 的选项参数里没有 pagination 属性,下面再去改造一下这个函数。 打开定义这个函数的 comment.servcie 模块。先在文件的顶部,从 post.service 里面,导入 GetPostsOptionsPagination。
然后找到 GetCommentsOptions 这个 interface,在它里面添加一个 pagination 属性,类型设置成 GetPostsOptionsPagination
回到 comment.controller,之前在这里提示的错误就不见了。
回到 comment.service,继续编辑 getComments 函数,在函数主体里面,把 options 里的 pagination 解构出来,它里面又有 limit 还有 offset,也把它们解构出来。
在 SQL 参数里面,添加一个 limit,还有 offset。 在准备的这段查询里面再添加点东西,在查询的最后,添加一个 LIMIT 它的值先用占位符表示,这个 LIMIT 可以限制结果数量。再添加一下 OFFSET,也用一个占位符来表示它的值,这个 OFFSET 可以设置一个结果的偏移量。
这些占位符的值已经在 params 里面准备好了。
然后到 HTTP 客户端,可以测试一下评论列表的这个分页功能, 打开评论列表请求,发送一下这个请求,会得到两条评论,因为现在评论列表接口会分组提供评论数据。
要调取其它页面上的评论数据,可以在请求地址里用 page 查询符设置一下页码,现在得到的就是第二页上的评论数据。再试一下,把 page 的值设置成 3 ,发送请求,这回没有得到评论,因为已经没有其它可用的评论数据了。也就是暂时我们应用里的评论数据只有两页。
回到项目,打开 .env ,修改一下 COMMENTS_PER_PAGE 这个环境变量的值,把它设置成 3 。然后随便打开项目里的一个文件,保存一下这个文件,会重新编译并且运行项目,这样新做的配置才会生效。
在 HTTP 客户端,请求一下,去掉地址里的查询符,发送请求。这次得到了三条评论,因为我们刚才设置了每页显示三条评论。 在地址里添加一个 page 查询符,把它的值设置成 2 ,发送请求,得到的就是第二页上的评论数据。