首页 > 其他分享 >无涯教程-ExpressJS - 中间件(Middleware)

无涯教程-ExpressJS - 中间件(Middleware)

时间:2024-01-30 12:31:39浏览次数:32  
标签:use req res app express 中间件 无涯 ExpressJS

中间件(Middleware)函数是可以访问请求对象(request object),响应对象(response object)以及应用程序的请求(request)-响应(response)中的下一个中间件函数。这些函数用于修改 req 和 res 对象,以执行诸如解析请求正文(responst bodies),添加响应标头(response headers)等任务。

这是一个实际的中间件函数的简单示例-

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

//简单的请求中间件
app.use(function(req, res, next){
   console.log("A new request received at " + Date.now());
   
   //这个函数调用非常重要。它告诉更多的处理是当前请求需要,并且在下一个中间件中
   function/route handler.
   next();
});

app.listen(3000);

服务器上的每个请求都会调用上述中间件,因此,在每个请求之后,无涯教程将在控制台中收到以下消息:

A new request received at 1467267512545

要将其限制为特定的路由,请将该路由作为 app.use() 的第一个参数提供。如,

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

//request请求协议的中间件函数
app.use('/things', function(req, res, next){
   console.log("A request for things received at " + Date.now());
   next();
});

//reponse响应的路由处理程序
app.get('/things', function(req, res){
   res.send('Things');
});

app.listen(3000);

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

调用顺序

Express中间件最重要的事情之一是它们在文件中的写入/包含顺序,考虑到路由匹配,还需要考虑它们的执行顺序。

如,在下面的代码片段中,第一个函数首先执行,然后执行路由处理程序,然后执行结束函数。这个示例总结了如何在路由之前和之后使用中间件。

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

//发送响应之前的第一个中间件
app.use(function(req, res, next){
   console.log("Start");
   next();
});

//路由处理程序
app.get('/', function(req, res, next){
   res.send("Middle");
   next();
});

app.use('/', function(req, res){
   console.log('End');
});

app.listen(3000);

在运行此代码后访问'/'时,在控制台上收到 Middle 的响应-

Start
End

下图总结了无涯教程对中间件的了解-

Middleware

既然已经介绍了如何创建自己的中间件,那么讨论一些社区最常用的中间件。

第三方中间件

此处可获得Express的第三方中间件列表。以下是一些最常用的中间件还将学习如何 use/install 命令-

body-parser

这用于解析 request body。需要使用npm install --save body-parser进行安装它,在index.js中包括以下几行:

var bodyParser=require('body-parser');

//解析 URL 编码数据
app.use(bodyParser.urlencoded({ extended: false }))

//解析json数据
app.use(bodyParser.json())

要查看body-parser的所有可用选项,请访问其github页面。

cookie-parser

它解析Cookie header 和 req.cookie。需要使用npm install --save cookie-parser进行安装它,在index.js中包括以下几行:

var cookieParser=require('cookie-parser');
app.use(cookieParser())

express-session

它使用给定的选项创建 session middleware。将在"session"部分中讨论其用法。

ExpressJS中还有许多其他第三方中间件。但是,无涯教程在这里只讨论了一些重要的问题。

参考链接

https://www.learnfk.com/expressjs/expressjs-middleware.html

标签:use,req,res,app,express,中间件,无涯,ExpressJS
From: https://blog.51cto.com/u_14033984/9482611

相关文章

  • 无涯教程-ExpressJS - HTTP方法
    请求中提供了HTTP方法,该方法指定了客户端已请求的操作。下表列出了最常用的HTTP方法-S.No.Method&Remark1GETGET方法用于获取数据2POSTPOST方法用于提交数据3PUTPUT方法用于修改数据4DELETEDELETE方法用于删除数据GETMethodGET请求通过在请求的URL部......
  • 无涯教程-ExpressJS - 路由(Routing)
    Web框架在不同的路径上提供HTMLpage,script,images等资源,以下函数用于在Express应用程序中定义routes路由-app.method该方法可以应用于任何HTTP请求方法–get,set,put,delete,处理程序是一个回调函数,当在相关routes上找到匹配的请求类型时执行。如,varexpress=require('express'......
  • 无涯教程-Django - Apache配置
    到目前为止,在无涯教程的示例中,已经使用了DjangodevWeb服务器,但是此服务器仅用于测试,不适合生产环境。一旦投入生产,您就需要一个真实的服务器,如Apache,Nginx等,在本章中讨论Apache。通过Apache为Django应用提供服务是通过使用mod_wsgi完成的。因此,第一件事是确保您已安装Apache和......
  • 专栏:数据库、中间件的监控一网打尽
    前言对于数据库、中间件的监控,目前社区里最为完善的就是Prometheus生态的各个Exporter,不过这些Exporter比较分散,不好管理,如果有很多目标实例需要监控,就要部署很多个Exporter,要是能有一个大一统的Exporter,具备所有这些Exporter的能力就好了。还真有,而且还不止一个,一个是 G......
  • 无涯教程-Swift - 修饰符
    协议中的常量,变量和函数受到限制,并允许通过访问控制以全局和局部方式进行访问。Swift4语言提供了三种不同的访问级别。它们是公共,内部和私有访问权限。S.NoAccessLevels&Definition1Public使实体可以在其定义模块的任何源文件中进行处理,而在导入定义模块的另一个模块......
  • 无涯教程-Swift - Generics(泛型)
    Swift4语言提供"Generic"函数来编写灵活且可重用的函数和类型,泛型用于避免重复并提供抽象,Swift4标准库是使用泛型代码构建的。Swift4s的"Arrays"和"Dictionary"类型属于Generic集合。funcexchange(a:inoutInt,b:inoutInt){lettemp=aa=bb=temp}varn......
  • 专栏:数据库、中间件的监控一网打尽
    前言对于数据库、中间件的监控,目前社区里最为完善的就是Prometheus生态的各个Exporter,不过这些Exporter比较分散,不好管理,如果有很多目标实例需要监控,就要部署很多个Exporter,要是能有一个大一统的Exporter,具备所有这些Exporter的能力就好了。还真有,而且还不止一个,一个是......
  • 无涯教程-Swift - 类型转换
    为了验证的类型,"TypeCasting"以Swift4语言开始发挥作用,它用于检查类型是属于特定的超类还是子类,或者是否在其自己的层次结构中定义。Swift4类型转换提供两个运算符"is"来检查值的类型和"as",并将类型值转换为其他类型,类型转换还检查类型是否遵循特定的协议一致性标准。类层......
  • 无涯教程-Swift - 引用计数
    内存管理函数及其用法通过自动引用计数(ARC)以Swift4语言处理。ARC用于初始化和取消初始化系统资源,从而在不再需要时释放类使用的内存空间。ARC跟踪有关我们的代码之间的关系的信息,以有效地管理内存资源。ARC函数每次通过init()创建新的类时,ARC每次都会分配一块内存来存储信......
  • 无涯教程-Swift - 解析构造
    在需要释放一个类实例之前,必须调用"deinitializer"来释放内存空间,关键字"deinit"用于取消分配系统资源占用的内存空间。释放内存空间当不再需要实例时,Swift4会自动释放其实例,以释放资源。Swift4通过自动引用计数(ARC)处理实例的内存管理,如自动引用计数中所述。通常,在实例......