从express转到koa,路由是比较纠结的一点,因为express的路由不能全部照搬到koa中去。如下路由是不能直接放到koa-router中用的。
express路由:
/tech(\/:pageNum(\\d+)-:pageSize(\\d+))?
/a(\/:pageNum(\\d+)-:pageSize(\\d+))?
一直觉得奇怪,为啥koa-router不对express的路由做一下兼容呢?并且其它koa路由中间件也是这样。很想找出这个原因,便去看express是如何实现这种路由的规则的。发现原来是使用了path-to-regexp来进行路由和参数的判断识别。再去看看koa-router,惊奇地发现它也是用这个库来做的。而且使用的方式大同小异。只有一点不同,就是库的版本。
express —4.13.4, path-to-regexp —0.1.7;
koa-router —5.4.0, path-to-grgexp —1.2.1。
因为path-to-regexp版本兼容的问题,导致两个框架所使用的路由便不可兼容。
这里说的koa-router的好处,其实是path-to-regexp —1.2.1比旧版本的更方便的地方。
express中,我们如果想让参数可选,必须实现前缀可选,如:
/a(/:pageNum)?
koa中,“/”是参数的一种前缀,参数可选也可使其前缀可选。原文表述如下:
Parameters can be suffixed with a question mark (?) to make the parameter optional. This will also make the prefix optional.
/aa/:pageNum?
文章开头部分的两个express路由,在koa-router中可这样改写:
/tech/:pageNum(\\d+)?(-)?:pageSize(\\d+)?
/a/:pageNum(\\d+)?(-)?:pageSize(\\d+)?
注:“-”不是参数前缀,所以得单独作校验。
感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/50.html
邮箱:glowrypauky@gmail.com
QQ: 892413924