在创建Express服务器时实例化app对象。它有一个中间件堆栈,可以在app.configure()
中自定义(现在在4.x版本中不推荐使用)。
要设置中间件,您可以调用app.use(
用于要添加的每个中间件层(它可以通用于所有路径,或者只在服务器处理的特定路径上触发),它将添加到Express中间件堆栈中。中间件层可以在use
的多次调用中一个接一个地添加,甚至可以在一次调用中串联地一次全部添加。有关详细信息,请参阅使用
文档。
为了从概念上理解Express中间件,给出一个例子,下面是我的app中间件堆栈(app.stack)在将我的app对象作为JSON记录到控制台时的样子:
stack:
[ { route: '', handle: [Function] },
{ route: '', handle: [Function: static] },
{ route: '', handle: [Function: bodyParser] },
{ route: '', handle: [Function: cookieParser] },
{ route: '', handle: [Function: session] },
{ route: '', handle: [Function: methodOverride] },
{ route: '', handle: [Function] },
{ route: '', handle: [Function] } ]
您可能可以推断,我调用了app.use(express.BodyParser())
,app.use(express.CookieParser())
等,它们将这些express中间件“层”添加到中间件堆栈中。请注意,路由是空白的,这意味着当我添加这些中间件层时,我指定在任何路由上触发它们。如果我添加了一个只在路径/user/:id
上触发的自定义中间件层,那么在上面的堆栈打印输出中,该中间件层对象的route
字段中将作为字符串反映出来。
每一层本质上都是在中间件中添加一个专门处理流的函数。
例如。通过添加BodyParser
,您可以确保服务器通过express中间件处理传入的请求。因此,现在解析传入请求的主体是中间件在处理传入请求时所采用的过程的一部分--这都是因为您调用了app.use(bodyParser)
。
use
是一种配置Express HTTP server对象的路由所使用的中间件的方法。该方法被定义为Express所基于的Connect的一部分。
从4.x版本开始更新,Express不再依赖于Connect。
以前包含在Express中的中间件功能现在放在单独的模块中;请参阅中间件功能列表。
每次向服务器发送请求时都会调用每个app.use(中间件)。