上QQ阅读APP看书,第一时间看更新
2.9 重写URL
相信你也遇到过这样的场景,老项目需要重构或迁移,之前路由涉及的一些问题需要重新设计,很多项目依赖老项目,如果一刀切,所有路由的依赖都需要改。这个时候,就需要考虑到URL重写了。也就是说,其他依赖的项目不用改动,重构后的项目中,如果还是之前的URL,就重写成新的URL进行请求。流程如图2-20所示。
图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所示。
图2-21 旧接口访问
可以看到,访问旧接口是能够访问到新接口数据的,这就是URL重写的一个应用场景。另外,URL重写也可以使用正则表达式,比如想重写/i123到/item/123,代码如下。
app.use(rewrite(/^\/i(\w+)/, '/items/$1'));
具体使用方法参考官方文档https://github.com/koajs/rewrite。