调用处理程序之前的 Koa ctx.query 验证

问题描述

我有一个实现以下内容的基本路线:

 { path: '',redirectTo: '/menu',pathMatch: 'full' },{
   path: 'menu',children:
    [
     { path: '',component: MenuComponent }
     { path: ':id',component: AboutComponent }
    ]
 }
 ];

我遇到的问题是类型。 router.get('/twitter/tweets',async (ctx) => { const { limit,page,search } = ctx.query ctx.body = { tweets: await twitter.all(limit,search),} }) 中的项目返回 ctx.query

调用的服务如下:
string[] | string

因此 async function all(_limit = 50,_page = 0,_search = '') {limit 值应为数字。处理 koa ctx 验证以便将正确类型传递给服务的最佳方法是什么。

解决方法

由于文档 (https://koajs.com/#request),request.query 返回一个对象,值是字符串,您正确地解构了这个对象,现在在变量 limit、{ {1}} 和 page

因此验证值有不同的可能性:

对于您的输入值,您可以执行以下操作:

search

也许您需要更复杂地验证您的数字和字符串值。例如。您还可以检查数值或字符串长度的最小值和最大值……但这取决于您的特定用例。