用户登录

在客户端应用里,想要实现分页功能,它还得知道要展示的内容总共的数量。服务端可以通过一个头部数据告诉客户端要展示的一共有多少个内容。

回到项目,打开 comment.service ,找个地方可以定义一个统计评论数量用的函数,定义并且导出一个异步函数,名字叫 getCommentsTotalCount,这个函数接收一个 options 参数,类型是 GetCommentsOptions ,提示没找到这个东西。

在上面可以检查一下,找到 获取评论列表 功能,这里我在定义这个 interface 的时候,名字里面少写了一个 s ,应该是 GetCommentsOptions ,再修改一下 getComments 函数的参数类型,GetCommnetsOptions。

继续再定义这个统计评论数量的功能。

在函数里面解构一下它的选项参数,把 filter 解构出来,这个属性是在 options 参数里面。

然后声明一下 SQL 参数,这个参数就是在查询里出现的占位符的值,用 let 声明一个 params ,类型是 Array,any,先让它等于一个空白的数组。

下面设置一下 SQL 参数,先判断 filter 里有没有 param,如果有,就设置 params 的值,把 filter 里的 param 先放进来,后面再加上原来在 params 里的东西。

准备一段要执行的查询,声明一个 statement ,用字符模板组织一段查询,查询里用 SELECT 选择需要的东西,这里可以用 COUNT 做一个统计,给这个统计的结果起个名字叫 total

统计的东西的前面,用 DISTINCT 去掉重复,统计的是 comment 的 id 。 然后在 FROM 的后面设置数据来源,这里就是 comment 数据表,查询里得拼接两个数据表,用 sqlFragment 里的 leftJoinUser 这个查询片断,复制一份,再添加一个 sqlFragment 里的 leftJoinPost 查询片断。

然后在 WHERE 的后面,设置一下过滤条件,条件就是 filter 里的 sql。

再把准备好的这段查询交给数据仓库执行一下,const 方括号 data,等于 await,执行 connection 上的 promise ,接着再调用 query 方法,要执行的查询是 statement ,查询里的占位符的值在 params 里面。

最后再让这个函数提供统计的结果,return 的就是 data 里的第一个项目里的 total 这个属性的值。

打开 comment.controller, 找到评论列表接口的处理器,就是这个 index ,在这个处理器里面,我们要统计一下要提供给客户端的评论的数量。

用一组 try,catch,然后在 try 里面,添加一个 totalCount,它的值可以是 await,执行 getCommentsTotalCount 这个函数返回的东西。给它提供一个选项参数,把 filter 属性的值设置成 request.filter。

刚才编辑器自动帮我们在文件的顶部导入了 getCommentsTotalCount 这个函数。

继续再修改一下这个 index 处理器, 有了评论数量以后,可以再用一下 resposne 上的 header 这个方法,在响应的头部里面添加一个 X-Total-Count,把它的值设置成上面得到的 totalCount 。 在 catch 区块里再处理一下发生的错误,执行 next,带着 error 。

回到 HTTP 客户端,再发送一下这个评论列表请求,然后观察一下响应里的 Header,你会发现这里有一个 X-Total-Count,它的值就是客户端要显示的评论的总数。

修改一下请求地址,加上一个 post 参数,把它的值设置成 1 ,这个请求的意思就是得到 id=1 的这个内容的评论列表。通过 X-Total-Count 这个头部,我们可以知道这个内容上一共有多少个评论。

统计评论数量《 Node.js 服务端应用开发:资源接口 》

统计

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

社会化网络

关于

微信订阅号

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