@koa/router 路由组合的问题
行也成文 11/23/2020
# @koa/router 路由组合的问题
现有一个子路由,其中有两个路由,分别处理 GET /
和 POST /login
。
import Router from '@koa/router';
const router = new Router();
router.get('/', async (ctx) => {
ctx.body = { msg: 'hello koa' };
});
router.post('/login', async (ctx) => {
console.log(ctx.request.body);
const { email, password, captcha } = ctx.request.body;
// omit
ctx.body = {
code: 10001,
status: 'success',
desc: '',
data: {
// userInfo,
},
};
});
export default router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
又有一个主路由,用于组合其他子路由。
import Router from '@koa/router';
import accountRouter from '@/routes/account';
import chatsRouter from '@/routes/chats';
import friendRouter from '@/routes/friend';
import homeRouter from '@/routes/home';
const router = new Router();
router.use('/', homeRouter.routes(), homeRouter.allowedMethods());
router.use('/accounts', accountRouter.routes(), accountRouter.allowedMethods());
router.use('/chats', chatsRouter.routes(), chatsRouter.allowedMethods());
router.use('/friends', friendRouter.routes(), friendRouter.allowedMethods());
export default router;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
如上代码,运行后,当一个请求访问的 POST /login
时,得到 404 的结果。按理说这个请求会映射到 homeRouter
,但实际上并没有。
经检查发现,@koa/router 把我的路由组合成了 POST //login
,所以访问失败,而访问 POST //login
才会成功。