Koa 中间件

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Koa 中间件

1. Koa 中间件简介

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


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


中间件的功能包括:

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

如果 get、post 回调函数中,没有 next 参数,那么就匹配上第一个路由,就不会往下匹配了,

如果想往下匹配的话,那么需要写 next();

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

2.1 应用级中间件

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
/*
中间件
*/
// 匹配任何路由 如果不写 next,这个路由被匹配到了就不会继续向下匹配 
app.use(async (ctx, next) => {
  ctx.body="中间件";
  console.log(new Date());
  await next();
})
router.get('/newsContent',async (ctx) => {
  ctx.body="新闻详情"
})
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000,()=>{ 
  console.log('应用已经启动,http://localhost:3000'); 
});

2.2 路由中间件

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
/*
中间件
*/
// 匹配到 news 路由之后继续向下匹配 
router.get('/news',async (ctx, next) => {
  console.log("新闻详情");  
  await next(); 
})
router.get('/news',async (ctx) => {
  ctx.body="新闻详情"
})
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000,()=>{ 
  console.log('应用已经启动,http://localhost:3000'); 
});

2.3 错误处理中间件

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
/*
中间件
*/
app.use(async (ctx,next) => {
  console.log('中间件');
  await next();
  if(ctx.status == 404){
    ctx.status = 404;
    ctx.body = '404页面';
  }else{
    console.log(ctx.url)
  }
})
router.get('/news',async (ctx, next) => {
  ctx.body="新闻详情"
  console.log('新闻详情')
})
app.use(router.routes());
app.use(router.allowedMethods());
app.listen(3000,()=>{ 
  console.log('应用已经启动,http://localhost:3000'); 
});

2.4 第三方中间件

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

3. Koa 中间件的执行顺序

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

2020062310470442.png




相关文章
|
11月前
|
前端开发 JavaScript 中间件
78 # koa 中间件的实现
78 # koa 中间件的实现
42 0
|
11月前
|
前端开发 中间件
77 # koa 中间件的应用
77 # koa 中间件的应用
33 0
|
4月前
|
资源调度 JavaScript 前端开发
koa常用中间件
koa常用中间件
45 0
|
JSON 缓存 前端开发
koa 中间件
在写一个服务端应用的时候,一般都会使用到作为静态服务器,node 搭建静态服务请查看我以前文章,express中间件实现静态资源服务的话可以使用 express.static()来实现,那么koa如何实现呢? 其实对于一个静态服务的话,只要你会node这个底层的原理,express 或者 koa 这些上层应用都是基于底层原理来的
koa 中间件
|
JavaScript 前端开发 中间件
尝试理解 Koa、Redux middleware 的演进过程
最近开发 web 端,用的是 Egg node.js 框架,期间实现的一些功能例如:权限检测、操作日志上报等都是基于框架的 middleware 机制件完成的。虽然最后完成了功能,但其实对中间件真正的实现机制、运行时序还不能做到完全的理解。 Egg 是基于 Koa 实现的,Koa 的代码量非常少,加起来也就 1000 多行,涉及到中间件核心的部分,也就不到 100 行,如果有耐心可以直接读
85 0
|
JavaScript 前端开发 中间件
尝试理解 Koa、Redux middleware 的演进过程
最近开发 web 端,用的是 Egg node.js 框架,期间实现的一些功能例如:权限检测、操作日志上报等都是基于框架的 middleware 机制件完成的。虽然最后完成了功能,但其实对中间件真正的实现机制、运行时序还不能做到完全的理解。
97 0
|
中间件 数据库
多个koa中间件执行顺序
多个中间件执行顺序 多个中间件会形成一个栈结构(middle stack),以"先进后出"(first-in-last-out)的顺序执行。 最外层的中间件首先执行。
2426 1
|
4月前
|
消息中间件 存储 负载均衡
消息中间件的选择:RabbitMQ是一个明智的选择
消息中间件的选择:RabbitMQ是一个明智的选择
87 0
|
3月前
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
420 0
|
2月前
|
消息中间件 编解码 Docker
Docker部署RabbitMQ消息中间件
【7月更文挑战第4天】Docker部署RabbitMQ消息中间件
236 3