koa-router 与 express内置中间件router

作者:杨润炜
日期:2016/4/25 16:41

express路由转到koa-router的烦恼

从express转到koa,路由是比较纠结的一点,因为express的路由不能全部照搬到koa中去。如下路由是不能直接放到koa-router中用的。
express路由:

  1. /tech(\/:pageNum(\\d+)-:pageSize(\\d+))?
  2. /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的好处

这里说的koa-router的好处,其实是path-to-regexp —1.2.1比旧版本的更方便的地方。

前缀可选

express中,我们如果想让参数可选,必须实现前缀可选,如:

  1. /a(/:pageNum)?

koa中,“/”是参数的一种前缀,参数可选也可使其前缀可选。原文表述如下:

Parameters can be suffixed with a question mark (?) to make the parameter optional. This will also make the prefix optional.

  1. /aa/:pageNum?

文章开头部分的两个express路由,在koa-router中可这样改写:

  1. /tech/:pageNum(\\d+)?(-)?:pageSize(\\d+)?
  2. /a/:pageNum(\\d+)?(-)?:pageSize(\\d+)?

注:“-”不是参数前缀,所以得单独作校验。

参考

path-to-regexp

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/50.html
邮箱:glowrypauky@gmail.com
QQ: 892413924