这个评论列表我们可以给它加上一个分页的功能,可以让它给客户端分组提供评论数据。之前我们已经给内容列表添加了分页功能,现在请求内容列表,每页会提供两条内容数据,这个每页的内容数量可以通过一个环境变量来设置。在 Header 选项卡,你会发现一个 X-Total-Count,它的值就是总共要提供的内容数量。客户端应用需要知道总共的内容数量才能实现分页功能。
这个分页是通过一个 paginate 中间件设置接口处理器需要的分页数据,下面我们可以改造一下这个中间件,让它支持一个每页项目数量的参数,这样我们就可以把它用在评论列表上了。
在项目里打开 post.middleware , 找到在这个文件里定义的 paginate 中间件,先剪切一下这个中间件函数,写一个箭头函数,让这个函数接收一个 itemsPerPage 参数,类型可以设置成 nubmer,这个参数就是每页上的内容项目的数量。
在这个函数的主体里面,我们让它 return 一个中间件,把刚才剪切的的中间件粘贴到 return 的后面。然后修改一下这个 limit 的值,去掉 parseInt ,这里可以直接换成 itemsPerPage,它就是 paginate 支持的一个参数。
现在执行这个 paginate 函数的时候,给它提供一个每页内容数量的参数,这个函数就会制造出来一个中间件,因为在这个函数里面,会 return 一个中间件。
在这个文件顶部导入的 POSTS_PER_PAGE 这个配置在这时太不再需要了,可以去掉它。
打开 post.router, 在文件顶部,导入 POSTS_PER_PAGE ,来自上一级目录 app 下面的 app.config 。
然后找到内容列表接口, 现在使用 paginate 的时候要给它提供一个每页内容数量参数,这个参数值可以用 POSTS_PER_PAGE 这个配置。
这里提示不能把 string 类型的值交给 number 类型的参数,因为 POSTS_PER_PAGE 这个配置数据的类型是 string,但是 paginate 支持的是一个数字类型的参数。
所以我们得再去处理一下 POSTS_PER_PAGE 的类型。 打开 app.config, 找到在这里导出的内容分页配置,去掉 POSTS_PER_PAGE 周围的大括号,让它等于 parseInt ,处理一下 process.env 里面的 POSTS_PER_PAGE 这个环境变量的值,把它转换成 10 进制的数字。
再回到 post.router,之前提供的错误就不会再显示了,因为现在 POSTS_PER_PAGE 这个配置的数据类型是 number,这样就可以把它交给 paginate 使用了。
回到 HTTP 客户端,测试一下内容列表的分页功能,发送一下这个请求。 现在仍然会分页提供内容数据。 打开 Header 选项卡,观察一下 X-Total-Count ,显示有 4 个内容项目。
修改一下请求的地址,在地址里加上 page 查询符,然后设置一下页码,发送请求,会得到对应的内容数据。