📜  Koa.js-级联

📅  最后修改于: 2020-10-23 07:46:50             🧑  作者: Mango


中间件功能是可以访问上下文对象的功能,并且是应用程序的请求-响应周期中的下一个中间件函数。这些功能用于修改任务的请求和响应对象,例如解析请求正文,添加响应头等。Koa更进一步,产生了“下游” ,然后将控件流回“上游” 。此效果称为级联

以下是一个实际的中间件函数的简单示例。

var koa = require('koa');
var app = koa();
var _ = router();

//Simple request time logger
app.use(function* (next) {
   console.log("A new request received at " + Date.now());
   
   //This function call is very important. It tells that more processing is 
   //required for the current request and is in the next middleware function/route handler.
   yield next;
});

app.listen(3000);

服务器上的每个请求都会调用上述中间件。因此,在每次请求之后,我们都会在控制台中收到以下消息。

A new request received at 1467267512545

要将其限制为特定的路由(及其所有子路由),我们只需像创建路由一样创建路由即可。实际上,这些中间件只是处理我们的请求。

例如,

var koa = require('koa');
var router = require('koa-router');
var app = koa();

var _ = router();

//Simple request time logger
_.get('/request/*', function* (next) {
   console.log("A new request received at " + Date.now());
   yield next;
});

app.use(_.routes());
app.listen(3000);

现在,无论何时您请求“ / request”的任何子路由,只有它会记录时间。

中间件调用顺序

在Koa中,关于中间件的最重要的事情之一是,它们在文件中的写入/包含顺序是在下游执行的顺序。一旦我们在中间件中打出yield语句,它将切换到下一个中间件,直到我们到达最后一个。然后,我们再次开始返回并从yield语句恢复函数。

例如,在以下代码段中,第一个函数首先执行直到yield,然后第二个中间件执行直到yield,然后第三个执行。由于这里没有更多的中间件,因此我们开始向后移动,以相反的顺序执行,即第三,第二,第一。这个例子总结了如何使用Koa中间件。

var koa = require('koa');
var app = koa();

//Order of middlewares
app.use(first);
app.use(second);
app.use(third);

function *first(next) {
   console.log("I'll be logged first. ");
   
   //Now we yield to the next middleware
   yield next;
   
   //We'll come back here at the end after all other middlewares have ended
   console.log("I'll be logged last. ");
};

function *second(next) {
   console.log("I'll be logged second. ");
   yield next;
   console.log("I'll be logged fifth. ");
};

function *third(next) {
   console.log("I'll be logged third. ");
   yield next;
   console.log("I'll be logged fourth. ");
};

app.listen(3000);

运行此代码后访问“ /”时,在控制台上,我们将获得-

I'll be logged first. 
I'll be logged second. 
I'll be logged third. 
I'll be logged fourth. 
I'll be logged fifth. 
I'll be logged last. 

下图总结了以上示例中实际发生的情况。

中间件描述

现在我们知道如何创建自己的中间件,让我们讨论一些社区最常用的中间件创建。

第三方中间件

此处提供用于Express的第三方中间件列表以下是一些最常用的中间件-

  • koa-bodyparser
  • 路由器
  • 静态
  • 压缩

在接下来的章节中,我们将讨论多个中间件。