用户登录

下面我们去创建一个设置排序方式用的中间件,在 src/post 目录的下面新建一个文件,名字是 post.middleware.ts ,在文件的顶部,导入中间件参数需要的几个类型,Request,Response,还有 NextFunction,它们都来自 express。

然后再去定义一个排序方式中间件,名字可以叫做 sort,在这个中间件的主体里面,先要获取到在客户端设置的排序方式。我们可以允许客户端通过 sort 这个查询符来设置需要的排序方式。可以把这个 sort 从请求的地址查询符里解构出来。

然后可以再声明一个表示排序用的 SQL ,用 let 声明一个 sqlSort,类型是 string。

下面可以根据客户端设置的 sort 这个查询符的值来设置一下 sqlSort 的值。用一个 switch ,检查一下 sort 这个查询符的值。添加一种情况,如果这个查询符的值等于 earliest,表示客户端需要的内容列表要按照内容的发布从早到晚排列。 这种情况就可以把 sqlSort 它的值设置成 post.id ASC,按内容的 id 升序排列。

复制一份,再添加一种情况,如果 sort 的值是 latest,表示要按照内容的发布从晚到早排列,这种情况可以把 sqlSort 的值设置成 post.id DESC,按内容的 id 降序排列。

再添加一种新的情况,如果 sort 它的值等于 most_comments ,意思是要按照内容评论的总数从多到少排列内容列表。这种情况可以把 sqlSort 的值设置成 totalComments DESC,后面可以用逗号分隔开,继续再设置一个的排列方式,比如按内容的 id 降序排列。

最后再添加一种默认的情况,可以设置一种默认的排序方式,让 sqlSort 的值等于 post.id DESC,默认按内容的 id ,降序排列。

下面我们可以在请求里添加一个 sort ,设置一下 request.sort 这个属性,让它等于 sqlSort 。 在中间件里面需要再执行一下 next() 继续下一步的处理。

然后打开 post.router,在文件的顶部,可以从 post.middleware 里面,导入定义的 sort 这个中间件,来自 post.middleware。

修改一下内容列表接口,可以去掉这个演示用的 requestUrl 中间件,换成一个 sort 中间件, 上面导入 requestUrl 的代码也可以去掉。

在 HTTP 客户端可以测试一下这个内容列表的排序功能。修改一下请求的地址,在地址里加上一个 sort 查询符,把它的值设置成 earliest 。

这样得到的结果就是按照内容的 id 升序排列。 修改一下这个 sort 查询符的值,换成 latest ,这回得到的结果就是按照内容的 id 降序排列的一个内容列表。

最后再试一下,把 sort 查询符的值换成 most_comments ,执行一下这个请求。这次得到的结果,会按照内容的评论总数降序排列,也就是评论数越多,位置就越靠前。

创建排序方式中间件《 Node.js 服务端应用开发:内容列表 》

统计

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

社会化网络

关于

微信订阅号

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