什么是中间件
通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以把它叫做中间件。
在express中间件(Middleware)是一个函数,它可以访问请求对象(requestobject(req)) , 响应对象(responseobject(res)), 和 web 应用中处理请求-响应循环流程中的中间件,一 般被命名为 next 的变量。在 Koa 中中间件和 express 有点类似。
中间件的功能包括:
- 执行任何代码。
- 修改请求和响应对象。
- '终结请求-响应循环。
- 调用堆栈中的下一个中间件。
Koa 应用可使用如下几种中间件
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 第三方中间件
使用(洋葱)
let Koa = require('koa');
let router = require('koa-router')();
let app = new Koa();
/**
* 匹配任何路由,如果不写next,这个路由被匹配到了就不会继续向下匹配
* app.use(async (ctx) => {
* ctx.body = "这是一个中间件";
* })
* app.use()如果是两个参数匹配默认路由,如果是一个参数函数匹配所有路由
*/
// 应用级中间件 匹配路由之前打印日期
// app.use(async (ctx, next) => {
// console.log('打印日期', new Date());
// await next(); // 当前路由匹配完成之后继续向下匹配
// });
router.get('/', async (ctx) => {
ctx.body = '首页';
});
/**
* 路由级中间件
*/
router.get('/news', async (ctx, next) => {
console.log('路由级中间件');
await next();
});
router.get('/news', async (ctx) => {
ctx.body = '路由级中间件';
});
/**
* 错误处理中间件
*/
app.use(async (ctx, next) => {
console.log('这是一个中间件');
next();
if (ctx.status === 404) {
ctx.status = 404;
ctx.body = '这是一个404页面';
} else {
console.log(ctx.url);
}
});
app.use(router.routes());
app.listen(3000);