chi*_*hin 326
在创建Express服务器时实例化app对象.它有一个可以自定义的中间件堆栈app.configure()
(现在在版本4.x中已弃用).
要设置中间件,您可以调用app.use(<specific_middleware_layer_here>)
要添加的每个中间件层(它可以是所有路径的通用,或仅在您的服务器处理的特定路径上触发),并且它将添加到您的Express中间件堆栈.中间件层可以在多次调用中逐个添加use
,或者甚至一次与一次调用串联添加.有关详细信息,请参阅use
文档
为了给Express Middleware概念性理解提供一个例子,这是我的应用程序中间件堆栈(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] } ]
Run Code Online (Sandbox Code Playgroud)
正如您可能推断的那样,我打电话给app.use(express.bodyParser())
,app.use(express.cookieParser())
等等,它们将这些表达中间件"层"添加到中间件堆栈中.请注意,路由是空白的,这意味着当我添加这些中间件层时,我指定它们在任何路由上被触发.如果我添加了一个自定义中间件层,该层仅在路径/user/:id
上触发,该路径将route
在上面的堆栈打印输出中的中间件层对象的字段中反映为字符串.
每个层实际上都添加了一个功能,专门处理通过中间件流动的内容.
例如,通过添加bodyParser
,您可以确保您的服务器通过快速中间件处理传入请求.因此,现在解析传入请求的主体是中间件在处理传入请求时所采用的过程的一部分 - 所有这些都是因为您调用了app.use(bodyParser)
.
Shu*_*rma 15
app.use()用于挂载中间件函数或挂载到指定路径,中间件函数在基本路径匹配时执行.
例如: 如果您在indexRouter.js中使用app.use(),如下所示:
//indexRouter.js
var adsRouter = require('./adsRouter.js');
module.exports = function(app) {
app.use('/ads', adsRouter);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,app.use()将'/ ads'上的路径挂载到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;
Run Code Online (Sandbox Code Playgroud)
在adsRouter.js中,ads-'/ ads/show'的路径就是这样,然后它将根据controllerIndex.ads.showAd()工作.
app.use([path],callback,[callback]): 我们可以在同一个上面添加一个回调.
app.use('/test', function(req, res, next) {
// write your callback code here.
});
Run Code Online (Sandbox Code Playgroud)
Jac*_*nde 11
app.use(function middleware1(req, res, next){
// middleware1 logic
}, function middleware2(req, res, next){
// middleware2 logic
}, ... middlewareN);
Run Code Online (Sandbox Code Playgroud)
app.use是一种在执行任何端路由逻辑或中间路由逻辑之前注册中间件或中间件链(或多个中间件)的方法,具体取决于中间件注册顺序。
中间件:形成具有3 个参数 req、res 和 next的函数/中间件函数链。next 是回调,它引用链中的下一个中间件函数,如果链的最后一个中间件函数 next 指向下一个注册的中间件链的第一个中间件函数。
小智 9
app.use()充当快递应用程序中的中间件.与app.get()和app.post()左右不同,您实际上可以使用app.use()而无需指定请求URL.在这种情况下,无论什么URL被击中,它都会被执行.
app.use()
处理所有中间件功能。
什么是中间件?
中间件是在两条所有路线之间像一扇门一样工作的功能。
例如:
app.use((req, res, next) => {
console.log("middleware ran");
next();
});
app.get("/", (req, res) => {
console.log("Home route");
});
Run Code Online (Sandbox Code Playgroud)
当您/
在控制台中访问route 时,将打印两条消息。第一条消息将来自中间件功能。如果没有next()
传递任何函数,则只有中间件函数运行,其他路由被阻塞。
小智 6
app.use()的工作方式如下:
这很简单。
然后只有express才能完成路由之类的其余工作。
express 中的 .use() 方法是一个 * 中间件处理程序。Express 应用程序本质上是一系列中间件函数调用。
\n一个 Express 应用程序可以使用 5 种不同类型的中间件,其中主要使用这两种:
\nApp.use() 用于将 *应用程序级中间件绑定到 app 对象的实例,该对象在创建 Express 服务器时实例化(对于路由器级中间件,使用 router.use() )。
\n句法 :app.use(path, middleware function/s)
这里,路径是可选的。如果未指定路径,则每次应用程序收到请求时都会执行该函数,无论点击了哪个 URL。
\n*示例:
\nAuth 中间件 - 在待办事项应用程序中,一旦已创建的用户登录,就会向他提供 JWT 令牌,每次用户发出 GET、PUT、PATCH、POST 或 DELETE 请求时都必须验证该令牌。
app.use("/api/*", verifyToken(req, res, next): void {\nconst jwt: string = req.headers['x-token-header'];\nif (!jwt) {\n res.status(403).send({ message: 'No token provided!' });\n} else {\n jsonwebtoken.verify(jwt, config.get('secretString'), (err) => {\n if (err) {\n res.status(403).send(err);\n } else {\n next();\n }\n });\n});\n
Run Code Online (Sandbox Code Playgroud)\n这里添加了 /api 路径,以区分不需要 JWT 身份验证的请求,例如注册和登录(因为我们不希望在不需要身份验证时执行中间件)。
\n*中间件函数是可以访问请求对象 (req)、响应对象 (res) 以及 application\xe2\x80\x99s 请求-响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为 next 的变量表示。
\n中间件的语法:function(req, res, next)
归档时间: |
|
查看次数: |
172490 次 |
最近记录: |