@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

又有一个主路由,用于组合其他子路由。

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

如上代码,运行后,当一个请求访问的 POST /login 时,得到 404 的结果。按理说这个请求会映射到 homeRouter,但实际上并没有。

经检查发现,@koa/router 把我的路由组合成了 POST //login,所以访问失败,而访问 POST //login 才会成功。

Last Updated: 10/23/2021, 4:31:30 PM