Koa 的中间件

什么是 Koa 的中间件

通俗的讲:中间件就是匹配路由之前或者匹配路由完成做的一系列的操作,我们就可以

把它叫做中间件。

在express中间件(Middleware)是一个函数,它可以访问请求对象(request object (req)), 响应对象(response object (res)), 和 web 应用中处理请求-响应循环流程中的中间件,一 般被命名为 next 的变量。在 Koa 中中间件和 express 有点类似。

中间件的功能包括:

执行任何代码。 修改请求和响应对象。 终结请求-响应循环。 调用堆栈中的下一个中间件。

如果我的 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹 配了。如果想往下匹配的话,那么需要写 next()

Koa 应用可使用如下几种中间件:

  应用级中间件
  路由级中间件
  错误处理中间件
  第三方中间件


 应用级中间件
 
//引入 koa模块

var Koa=require(‘koa‘);
var router = require(‘koa-router‘)();  /*引入是实例化路由** 推荐*/
var app=new Koa();

//Koa中间件

//匹配任何路由  ,如果不写next,这个路由被匹配到了就不会继续向下匹配
/*
 app.use(async (ctx)=>{
    ctx.body=‘这是一个中间件‘;
 })
* */

/*匹配路由之前打印日期*/
app.use(async (ctx,next)=>{

    console.log(new Date());

    await next(); /*当前路由匹配完成以后继续向下匹配*/
})

router.get(‘/‘,async (ctx)=>{

    ctx.body="首页";

})
router.get(‘/news‘,async (ctx)=>{
    ctx.body="新闻列表页面";

})
router.get(‘/login‘,async (ctx)=>{
    ctx.body="新闻列表页面";
})

app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3002);

  路由级中间件
//引入 koa模块

var Koa=require(‘koa‘);
var router = require(‘koa-router‘)();  /*引入是实例化路由** 推荐*/
var app=new Koa();

//Koa中间件

//匹配任何路由  ,如果不写next,这个路由被匹配到了就不会继续向下匹配

router.get(‘/‘,async (ctx)=>{

    ctx.body="首页";

})
// 匹配到news路由以后继续向下匹配路由
router.get(‘/news‘,async (ctx,next)=>{
    console.log(‘这是一个新闻1‘);

    await next();
})
router.get(‘/news‘,async (ctx)=>{

    ctx.body=‘这是一个新闻‘;
})

router.get(‘/login‘,async (ctx)=>{
    ctx.body="新闻列表页面";
})

app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3002);

错误处理中间件

//引入 koa模块

var Koa=require(‘koa‘);
var router = require(‘koa-router‘)();  /*引入是实例化路由** 推荐*/
var app=new Koa();

//Koa中间件

//匹配任何路由  ,如果不写next,这个路由被匹配到了就不会继续向下匹配

//www.域名.com/news
app.use(async (ctx,next)=>{
    console.log(‘这是一个中间件01‘);
    next();

    if(ctx.status==404){   /*如果页面找不到*/
        ctx.status = 404;
        ctx.body="这是一个 404 页面"
    }else{
        console.log(ctx.url);
    }
})

router.get(‘/‘,async (ctx)=>{

    ctx.body="首页";

})
router.get(‘/news‘,async (ctx)=>{
    console.log(‘这是新闻2‘);
    ctx.body=‘这是一个新闻‘;
})
router.get(‘/login‘,async (ctx)=>{
    ctx.body="新闻列表页面";
})

app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3002);

第三方中间件

const static = require(‘koa-static‘); const staticPath = ‘./static‘; app.use(static(
path.join( __dirname, staticPath) ))
const bodyParser = require(‘koa-bodyparser‘); app.use(bodyParser());

中间件的处理流程

//引入 koa模块

var Koa=require(‘koa‘);
var router = require(‘koa-router‘)();  /*引入是实例化路由** 推荐*/
var app=new Koa();

//Koa中间件

//匹配任何路由  ,如果不写next,这个路由被匹配到了就不会继续向下匹配

//www.域名.com/news
app.use(async (ctx,next)=>{
    console.log(‘1、这是第一个中间件01‘);
    await next();

    console.log(‘5、匹配路由完成以后又会返回来执行中间件‘);
})

app.use(async (ctx,next)=>{
    console.log(‘2、这是第二个中间件02‘);
    await next();

    console.log(‘4、匹配路由完成以后又会返回来执行中间件‘);
})

router.get(‘/‘,async (ctx)=>{

    ctx.body="首页";

})
router.get(‘/news‘,async (ctx)=>{

    console.log(‘3、匹配到了news这个路由‘);
    ctx.body=‘这是一个新闻‘;
})

app.use(router.routes());   /*启动路由*/
app.use(router.allowedMethods());
app.listen(3002);

Koa 中间件的执行顺序

Koa 的中间件和 Express 不同,Koa 选择了洋葱圈模型。

洋葱图:

原文地址:https://www.cnblogs.com/loaderman/p/11511157.html

时间: 2024-10-11 06:07:17

Koa 的中间件的相关文章

koa 常用中间件

koa-router 用户Koa的路由器中间件 路由是Web框架必不可少的基础功能,koa.js为了保持自身的精简,并没有像Express.js自带了路由功能,因此koa-router做了很好的补充,作为koa星数最多的中间件,koa-router提供了全面的路由功能,比如类似Express的app.get/post/put的写法,URL命名参数.路由命名.支持加载多个中间件.嵌套路由等.其他可选路由中间件:koa-route, koa-joi-router, koa-trie-router k

Koa框架实践与中间件原理剖析

Koa框架实践与中间件原理剖析 最近尝试用了一下Koa,并在此记录一下使用心得. 注意:本文是以读者已经了解Generator和Promise为前提在写的,因为单单Generator和Promise都能够写一篇博文来讲解介绍了,所以就不在这里赘述.网上资料很多,可以自行查阅. Koa是Express原班人马打造的一个更小,基于nodejs平台的下一代web开发框架.Koa的精妙之处就在于其使用generator和promise,实现了一种更为有趣的中间件系统,Koa的中间件是一系列generat

koa中间件分析

转载请注明: TheViper http://www.cnblogs.com/TheViper  另外可以参考http://purplebamboo.github.io/2014/05/24/koa-source-analytics-3/,作者用简单的方式造了一个山寨koa. koa是什么? koa是从2013年11月开始发布,更新的.和express相比,koa太年轻了.但它(用文档上的话说)通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升常用错误处理效率.Ko

koa2中间件koa和koa-compose源码分析原理(一)

koa是基于nodejs平台的下一代web开发框架,它是使用generator和promise,koa的中间件是一系列generator函数的对象.当对象被请求过来的时候,会依次经过各个中间件进行处理,当有yield next就跳到下一个中间件,当中间件没有 yield next执行的时候,然后就会逆序执行前面那些中间件剩下的逻辑代码,比如看如下的demo: const Koa = require('koa'); const app = new Koa(); app.use(async (ctx

koa+orm2

koa+orm2 koa是由 Express 原班人马打造的新的web框架.套用其官方的说法:Koa 应用是一个包含一系列中间件 generator 函数的对象. 这些中间件函数基于 request 请求以一个类似于栈的结构组成并依次执行. koa的中间件系统原理: Koa的精妙之处就在于其基于promise的中间件系统的实现,避免了免除重复繁琐的回调函数嵌套.Koa的中间件是一系列generator函数的对象,执行起来有点类似于栈的结构,依次执行.从网上找到一张图可以比较形象的说明koa的中间

[Node.js] ECMAScript 6中的生成器及koa小析

原文地址:http://www.moye.me/2014/11/10/ecmascript-6-generator/ 引子 老听人说 koa大法好,这两天我也赶了把时髦:用 n 安上了node 0.11.12,下了个koa开启harmony模式试水.在一系列文档和贴子的教育下,大概认识到: koa 是TJ大神主导的新一代Web框架 koa 的中间件基于ES6的生成器函数(function *)形式 koa的核心流程库是 co,它能很好的解决Pyramid of Doom问题 在接触 Node.j

koa 学习笔记

首先解释一下koa是什么? 同当前炙手可热的Express一样,它是一款更年轻的web应用框架 它和Express的异同? Koa,是 Express 原班人马基于 ES6 新特性重新开发的框架,主要基于co 中间件,框架自身不包含任何中间件,很多功能需要借助第三方中间件解决,但是由于其基于 ES6 generator 特性的异步流程控制,解决了 "callback hell" 和麻烦的错误处理问题. 异步流程控制 Express 采用 callback 来处理异步,Koa v1 采用

【转载】koa相关知识(来自官网)

什么是Koa? koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率.koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手. Koa的应用? Koa 应用是一个包含一系列中间件 generator 函数的对象. 这些中间件函数基于 request 请求以一个类似于栈

Koa2——中间件

1.什么是koa2中间件? koa对网络请求采用了中间件的形式处理,中间件可以介入请求和相应的处理,是一个轻量级的模块,每个中间负责完成某个特定的功能.中间件的通过next函数联系,执行next()后会将控制权交给下一个中间件,如果没有有中间件没有执行next后将会沿路折返,将控制权交换给前一个中间件. 当执行app.listen方法开启服务器时,实际上是在内部,使用http模块,启动了http服务器,并将自身的callback函数传入 二.常用的五个中间件 1.koa:面向node.js的表达