NodeJS / Express:什么是“app.use”?
在app.use(...)
express
模块的文档中 ,示例代码有app.use(...)
。
什么是use
function,它在哪里定义?
应用程序对象在创buildExpress服务器时被实例化。 它有一个可以在app.configure()
定制的中间件堆栈 (现在在4.x版本中已经弃用了) 。
要设置中间件,可以为每个要添加的中间件层调用app.use(<specific_middleware_layer_here>)
(它可以是所有path通用的,也可以是仅在您的服务器处理的特定path上触发的)将添加到您的Express中间件堆栈。 中间件层可以在多个use
调用中逐个添加,甚至可以一次全部与一个调用一起添加。 请参阅use
文档了解更多详细信
为了给快速中间件的概念理解提供一个例子,下面是我的应用程序中间件堆栈(app.stack)在将我的应用程序对象作为JSONlogging到控制台时的外观:
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())
等等,它们把这些expression中间件的图层添加到中间件堆栈中。 请注意,路由是空的,这意味着当我添加了那些中间件层时,我指定它们在任何路由上被触发。 如果我添加了一个只在path /user/:id
上触发的自定义中间件层,它将在上面的堆栈打印输出中的中间件层对象的route
字段中反映为string。
每一个层次本质上都是添加一个函数,专门处理通过中间件的stream量。
例如,通过添加bodyParser
, 您可以确保您的服务器通过快速中间件处理传入的请求 。 因此, 现在parsing传入请求的主体是您的中间件在处理传入请求时所采用的过程的一部分 – 所有这些都是因为您调用了app.use(bodyParser)
。
use
是一种configurationExpress HTTP服务器对象的路由使用的中间件的方法。 该方法被定义为Express的基础部分。
每次向服务器发送请求时,都会调用每个app.use(中间件) 。
app.use()用于装入中间件函数或挂载到指定的path,中间件函数在基本path匹配时执行。
例如:如果您在indexRouter.js中使用app.use(),如下所示:
//indexRouter.js var adsRouter = require('./adsRouter.js'); module.exports = function(app) { app.use('/ads', adsRouter); }
在上面的代码中,app.use()将'/ ads'上的path安装到adsRouter.js。
现在在adsRouter.js中
// adsRouter.js var router = require('express').Router(); var controllerIndex = require('../controller/index'); router.post('/show', controllerIndex.ads.showAd); module.exports = router;
在adsRouter.js中,path将如此,广告“/ ads / show”,然后根据controllerIndex.ads.showAd()工作。
app.use([path],callback,[callback]):我们可以添加一个callback。
app.use('/test', function(req, res, next) { // write your callback code here. });
中间件是用于“粘合在一起”的软件的总称,所以app.use是一种configuration中间件以例如parsing和处理请求主体的方法:app.use(bodyParser.urlencoded({extended:true}) ); app.use(bodyParser.json()); 有很多中间线你可以使用在你明确的应用程序刚刚阅读文档: http ://expressjs.com/fr/guide/using-middleware.html
app.use()的工作原理是这样的:
- 请求在节点http服务器实例上触发的事件。
- expression式做req对象的一些内部操作。
- 这是当快递开始做你用app.use指定的东西
这很简单。
只有这样,express才能完成路由等其他内容。
通过使用app.use()和app.METHOD()函数将应用程序级中间件绑定到应用程序对象的实例,其中METHOD是中间件函数处理请求的HTTP方法(如GET,PUT或POST)小写。
如果我们从express中导入express,并使用app = express(); 那么应用程序具有所有快递的function
如果我们使用app.use()
与任何模块/中间件function在整个快递项目中使用
app.use()基本上是一个中间件,通常用于渲染页面。