koa2的中间件功能及应用示例

2020-06-17 07:59:25易采站长站整理

最近因为开发一个自己的博客网站,学习了koa2的搭建,写了一些自己认为比较重要或需要知道的koa2中间件作用和使用场景。

koa-router

路由中间件

下载


npm i koa-router

使用

普通使用方法

需要注意的是引入的koa-router是一个方法,引入后需要执行这个方法。


const Koa = require('koa');
const app = new Koa();
const router = require('koa-router')();

// 配置路由url
// 默认url
router.get('/', async (ctx, next) => {
ctx.body = 'Hello World';
});

// 自定义url
router.get('/hello/:name', async (ctx, next) => {
var name = ctx.params.name;
ctx.response.body = `<h1>Hello, ${name}!</h1>`;
});

// 注册路由
app.use(router.routes(), router.allowedMethods());

也可以按需引入并注册路由,可注册多个路由。

不同请求下接收的参数获取

router.get

通过ctx.query获取参数

router.post
通过ctx.request.body获取参数

动态路由 router.get(‘/:id’, func)
通过ctx.params获取参数

遍历注册router

首先引入nodejs中的fs模块,使用fs的readdirSync方法获取到指定目录的所有文件名,遍历引入路由模块并注册。

const fs = require(‘fs’); 


// fs.readdirSync 获取指定目录下的所有文件名称,遍历引入路由模块并注册
fs.readdirSync('./routes').forEach(route=> {
let api = require(`./routes/${route}`);
app.use(api.routes(), api.allowedMethods());
});

koa-router中的其它api

router.prefix(prefix) 添加url前缀

设置已经初始化的路由器实例的路径前缀


router.prefix('/user');
router.post('/login', function(ctx, next) {
...
});

// 实际路径 /user/login

router.use(url|[url1,url2,…], (ctx, next) => {…}) 路由中间件

使用场景:我们通常需要通过验证用户和用户权限来判定用户是否能使用该接口,如果在每个接口都写一次验证非常麻烦且不好维护。这时我们就需要路由中间件先进行验证,再执行下面操作。

router.use的第一个参数为一个路径或者由多个需要使用中间件的路径组成的数组(需要注意的是,如果路由设置了url前缀,需要在设置前缀后注册中间件,参数中的url不需要设置前缀)。

router.use的第二个参数为函数,函数传递ctx和next两个参数,可通过ctx进行权限验证后,判断是否执行next调用接口。这里特别需要注意的是函数使用next的时候需要添加await,如果不添加,在调用接口前,接口就会返回结果,前台则无法获取到数据。