koa-router 8 升级迁移手册
在公司内有小伙伴用了 koa-router 8,但是我发现他的用法并不正确,没有注意到 breaking changes。于是翻译一波这个……
如果想要体验一下最新版本,只要
npm install koa-router@next
即可。
7.x 中:
1router.use('/nested/path', otherRouter.routes())
2router.use('/users', userAuth());
3
8.x 的变更:
1const router = new Router({prefix: '/nested/path'});
2router.nest('/nested/path', otherRouter);
3
4const router = new Router({prefix: '/users'});
5router.use(userAuth());
6
7.x 中:
1parentRouter.use(childRouter.routes());
2
8.x 的变更:
1parentRouter.nest(childRouter);
2
1// use -> nest
2forums.use(posts.routes());
3
简言之,上面变成了下面这种形式:
1forums.nest(posts);
2
在使用完 .routes()
之后在声明路由将不再适用。你必须在使用 .routes()
之前声明好路由。.routes()
是一个在那个时段的路由的快照。在使用完 .routes
后没有变更将会对上一个 routes()
调度产生影响。
1app.use(router.routes());
2router.post('/some-endpoint', () => {});
3
需要变更为:
1router.post('/some-endpoint', () => {});
2// 必须在 调用 .routes() 前注册路由!
3app.use(router.routes());
4
.use()
不再支持路径前缀。取而代之的,嵌套一个路由。
1const router = new Router();
2router.use('/admin', authenticateAdmin);
3router.get('/secrets', () => {});
4app.use(router.routes());
5
变更为:
const secretsRouter = new Router();
const adminRouter = new Router();
secretsRouter.get('/secrets', () => {});
adminRouter.nest('/admin', secretsRouter);
app.use(adminRouter.routes());
调用 routes()
后对路由进行变更不会影响先前由 routes()
返回的中间件。
当路由嵌套时,仍然可对其进行更改。在路由或者任何祖先上调用 routes()
后,路由的更改将被忽略。
1router.use('*', ...)
2
变更为:
1router.use(...);
2
「按 URL 出现顺序运行参数中间件」变更为根据 param
调用的顺序。
1router.get('users-index', '/users', () => { ... });
2router.url('users-index', {}, { query: { page: 1 } });
3// => /users?page=1
4
变更为:
1router.get('users-index', '/users', () => { ... });
2router.url('users-index', { page: 1 });
3// => /users?page=1
4
重定向命名路由:
旧的页面的 GET
的处理程序因为首先被定义,所以它首先被匹配。在定义重定向时,她其实只是另一个符合匹配的处理程序。重定向你的处理程序,而不是重定向这种方法。
1const router = create()
2 .get('newpage', '/newpage', () => {})
3 .get('oldpage', '/oldpage', () => {})
4 .redirect('oldpage', 'newpage');
5
变更为:
1const router = create()
2 .get('newpage', '/newpage', () => {})
3 .get('oldpage', '/oldpage', (ctx) => ctx.redirect(ctx.router.path('oldpage')));
4
参考资料:
评论 (0)