koa-router使用细节

前言

由于用Nodejs开发后端,选择了 Koa 作为开发框架,但是Koa只是一个核心框架,路由、文件上传等功能都是由第三方中间件提供。
这里用到了 koa-router 中间件实现路由功能

koa-router

这是一个比较成熟且使用广泛的路由中间件
一个比较基础的使用方式如下

var Koa = require('koa');
var Router = require('koa-router');

var app = new Koa();
var router = new Router();

router.get('/', (ctx, next) => {
  // ctx.router available
});

app
  .use(router.routes())
  .use(router.allowedMethods());

具体项目

需要实现两个路由

GET /resources/:resource_id
GET /resources/types

写法如下

...
router
    // 获取资源类别
    .get("/resources/types", GetResourceTypes)
    // 获取指定资源
    .get("/resources/:resource_id", GetResource)
...
async function GetResourceTypes(ctx, next) {
	console.log("hello 1");
	await next();
}

async function GetResource(ctx, next) {
	console.log("hello 2");
	await next();
}

奇怪的事情发生了

当访问 http://mydomain/resources/types 时打印了

hello 1
hello 2

而不是 hello 1

解决过程

Q: 看来是同时匹配到两个路由,应该是 next 的问题

A: 去掉 await next() 果然OK了

你可能感兴趣的:(后端开发)