Koa开发:入门、进阶与实战
上QQ阅读APP看书,第一时间看更新

2.9 重写URL

相信你也遇到过这样的场景,老项目需要重构或迁移,之前路由涉及的一些问题需要重新设计,很多项目依赖老项目,如果一刀切,所有路由的依赖都需要改。这个时候,就需要考虑到URL重写了。也就是说,其他依赖的项目不用改动,重构后的项目中,如果还是之前的URL,就重写成新的URL进行请求。流程如图2-20所示。

0

图2-20 URL重写流程图

基于这个场景,我们实现一下URL重写。Koa的实现以官方提供的中间件koa-rewrite为例,具体代码如下。

const Koa = require('koa')
const rewrite = require('koa-rewrite')
const app = new Koa()

const Router = require('koa-router')
const router = new Router()

router.get('/api/new/getUserInfo', async ( ctx ) => {
  ctx.body = '这是新接口数据!'
})

app.use(rewrite('/api/getUserInfo', '/api/new/getUserInfo'));
app.use(router.routes())

app.listen(4000, () => {
  console.log('server is running, port is 4000')
})

在浏览器直接访问/api/getUserInfo,看能不能访问到新接口数据,效果如图2-21所示。

0

图2-21 旧接口访问

可以看到,访问旧接口是能够访问到新接口数据的,这就是URL重写的一个应用场景。另外,URL重写也可以使用正则表达式,比如想重写/i123到/item/123,代码如下。

app.use(rewrite(/^\/i(\w+)/, '/items/$1'));

具体使用方法参考官方文档https://github.com/koajs/rewrite