手机版

连接NodeJS学习笔记的中间件模块(一)

时间:2021-10-14 来源:互联网 编辑:宝哥软件园 浏览:

希望大家能一直看我的系列文章,这也是对我最大的鼓励和支持。让我们一起进步,认识朋友,互相帮助。好了,让我们进入今天的话题。

什么是“连接”,如何在中间件中理解?带着问题看今天的文章。

如何理解‘中间件’?

我的理解是中间件有点像过滤器,一种处理客户端和应用程序之间请求和响应的方法。

如果把http进程比作污水处理,中间件就像层层过滤器。每个中间件在http处理期间重写请求或(和)响应的数据,

状态,以实现特定的功能。

什么是“连接”?

我们可以把Connec看作是中间件的集合。对于每个请求,Connect都会使用中间件层对请求进行过滤,每个中间件都可以获取HTTP请求。

谈到Connect,T . J Holowaychuk说中间件有两种。一个是过滤器:

过滤器处理请求,但是它们不响应请求(想想服务器日志)。

第二种类型是提供者,它将响应请求。您可以根据需要使用多个中间件。Http请求将通过每个中间件,直到一个中间件响应请求。

其次,介绍了Connect内置中间件。

下面列出了几个主要的中间件,并给出了例子:

(1)、cookieParser - cookie解析中间件,解析cookie头,通过req.cookies获取cookie.您也可以通过req.secret加密cookies.

复制代码如下:VARConnect=REQUIRE('。/lib/connect ');var app=connect()。使用(connect.cookieParser('秘密字符串')。use(function (req,res,next){ req.cookies .网站='嗨,我是bigbear!';RES . end(JSON . stringify(req . cookies));}).听(8888);

(2)会议

描述:会话管理中间件。

依赖项:cookieParser

参数:选项

选项:

Key:Cookies名称,默认值为connect.sid

Store:会话存储实例。

secret:会话的Cookie加密。

Cookie:会话的cookie配置,默认值为{path:'/',httponly: true,maxage: null}。

代理:安全cookie的反向代理,由x-forward-proto实现。

Cookie选项:

cookie.maxAge:的默认值为null,这意味着浏览器关闭时会删除cookie。

复制代码如下:VARConnect=REQUIRE('。/lib/connect ');var app=connect()。使用(connect.logger('dev ')。使用(connect.cookieParser())。请使用(connect . session({ secret : ' 123 ',cookie: { maxAge: 60000 }})。使用(函数(req,res,next){ if(req . session . PV){ RES . setheader(' Content-Type ',' text/html ');RES . write(' views 3360 ' req . session . PV);RES . end();req . session . PV;} else { req . session . PV=1;res.end('刷新');}}).听(8888);

随着客户端对页面“PV”的不断刷新,服务器维护的“Session”数量将会增加。

(3)、bodyParser - request内容解析中间件,支持各种类型的应用/JSON、应用/x-www-form-urlencoded、multipart/form-data。

复制代码如下: var CONNECT=REQUIRE(' CONNECT ');var app=connect()。使用(connect.bodyParser())。use(function(req,RES){ RES . end(' req . body=' JSON . stringify(req . body));}).听(8888);

第三,让我们举一个比较的例子来看看使用中间件的好处。

复制代码如下:/* *使用connect */var connect=require(' connect ')进行静态文件处理;connect(connect . static(_ dirname/' public '))。listen(//listen 8888,function(){ console . log(' connect started on port 8888 ');});/* *使用节点本机api实现*/var http=require(' http ');http.createServer(函数(req,RES){ var URL=require(' URL ');var fs=require(' fs ');var pathname=_ _ dir name/' public ' URL . parse(req . URL)。路径名;//读取本地文件fs.readfile(路径名,函数(err,data){//异常处理if(err){ RES . write head(500);RES . end(' 500 ');} else { res.end(数据);} } );}).listen(//listen 8888,function () {console.log ('http服务器在端口8888上启动');});

尽管node native api已经花费了这么多行代码,但是它仍然没有处理简单的静态文件服务器的许多方面。

比如404等异常不处理,没有基本的文件路径安全验证(其实我们可以访问整个os文件系统),全局异常处理等等;

同时,connect已经处理了所有这些问题。

第四,总结。

(1)了解中间件流处理。

复制代码如下: varaapp=CONNECT();app . use(connect . static cache());app . use(connect . static(_ dirname/' public ');app . use(connect . cookieparser());app . use(connect . session());app . use(connect . query());app . use(connect . BodyParser());app . use(connect . csrf());使用(函数(req,RES,next){//中间件});app . listen(8888);

(2)原生实现和中间件实现的区别。

(3)通过上面提到的几个中间件实例,了解目的和使用场景,参考相关文档掌握其他中间件的基本使用方法。

版权声明:连接NodeJS学习笔记的中间件模块(一)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。