zoukankan      html  css  js  c++  java
  • Express-及中间件的简单理解

    Express

    Express 是一个基于node平台,保持最小规模的灵活的 Node.js Web 应用程序开发框架,Node.js基础上扩展对了web应用开发所需要的基础功能 Web 和移动应用程序提供一组强大的功能。

    首先安装express

        cnpm install express -g

    其次:通过express-generator可以快速的帮我们搭建一个应用的骨架。

        npm install express-generator -g

    输入命令:express -e,搭建骨架。

    1 //引入模块
    2 const express = require('express');
    3 //app:express的返回值,express的实例
    4 const app = express()
    5 //get请求
    6 app.get('/', (req, res) => res.send('Hello World!')) //发送一个helloword
    7 app.listen(3000)

    Express使得我们开发Web应用更加快捷、方便。

    举一个例子:

    node.js在控制台打印出一个"你好"

    1 var http = require("http");
    2 http.creatServer((req,res)=>{
    3     console.log("你好");
    4 }).listen(6666);

    这样,当我们处理各种数据传送请求时,需要将所有请求的处理代码写在creatSercer包裹的函数里。

    而用Express实现在控制台打印出一个"你好"。

    1 var express = require("express");
    2 var http = require("http");
    3 var app = express();
    4 http.creatServer(app);
    5 //处理用户请求(路由)
    6 app.get("/",()=>{
    7     console.log("你好");
    8 })

    Express处理各种数据传送请求是通过Express执行函数去调用对应的方法,其实也是执行express()后,会返回一个函数,赋值给app,app就是express,然后请求都会被app这个函数所处理,可以这样认为,在express内部,有一个函数的数组,每一次来一个请求,express内部就会执行这个数组中满足条件的函数,而app.ues就是用来使用中间件的。

    中间件

    说到中间件,官网对他的阐述是这样的:

    “Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件。由此可见中间件在Express开发中的重要性,可能官网所说的比较官方,那么来举个例子:

    可以想象一下我们租房时遇到的房产中介,他会给我们提供一些信息,他所处的角色是介于房主与我们之间,他的作用就是会带我们看房等我所请求的要求,而他的作用,就相当于中间件的作用,就相当于服务器的请求和回复之间,租客和房东之间。

    简单来说,由于在用node api进行http请求的处理时要求引入很多的模块,类似于url模块、fs模块等等,并且在对http请求做处理时需要很多重复但不是逻辑上的操作,所以就会出现已经帮你封装好的中间件,让你不再耗费时间在数据处理和异常处理上,这样可以大大减少代码量,逻辑更清晰,具有便捷高效的扩展性。

    而中间件主要解决了什么问题呢?

    它主要是拓展了一些resreq的方法。这些方法可以去帮我们解决一些复杂的,需要自己去解决的问题。因此我就来总结一下中间件。

    一、中间件的结构

    app.use([path],function)

    path:是路由的url,默认参数为"/",意义是路由到这个路径是使用这个中间件,这个参数为需要的时候写不需要的时候可以不写。

    function:中间件函数,这个函数可以理解为:function(req,res,next)

    自上面的结构中,我们了解了中间件使用时的第二个参数是一个函数,而这个函数拥有三个参数(req,res,next);那么下面我们了来说一下这三个参数的作用。

    当每个请求到达服务器时,nodejs会为了某个请求而去创建一个请求对象(req),该请求对象包含客户端提交上来的数据,同时也会创建一个响应对象(res),响应对象主要负责将服务器的数据响应到客户端。

    而最后一个参数next是一个方法,因为开发一个项目需要使用到多个中间件,而想要运行下一个中间件,那么上一个中间件必须运行next(),如果没有调用next()的话,就不会调用下一个函数了,也就是说调用会被终止,再一次来举个栗子:

    1 app.use((req,res,next)=>{
    2     console.log('111');
    3     next();
    4     console.log('222');
    5 })
    6 app.use((req,res,next)=>{
    7     console.log('333');
    8     next();
    9 });

    控制台输出的顺序为:111 333 222

    二、中间件的分类

    1、内置的中间件

    express.static Express目前唯一的内置中间件,它基于serve-static,用来处理静态资源文件,它有两个参数,参数root是指提供静态资源的根目录,可选的options参数拥有如下属性。

    2、第三方中间件

    Express是一款提供路由和中间件的Web框架,但其本身的功能却异常精简,Express应用的功能通过第三方中间件来添加。

    有关第三方中间件,分析几个比较重要和常用的。

    body-parser:解析body中的数据,并将其保存为Request对象的body属性。

    cookie-parser:解析body中的数据,并将其保存为Request对象的cookie属性。

    express-session:解析服务端生成的sessionid对应的session数据,并将其保存为Request对象的session属性。

    query:这个中间件,将一个查询字符串从URL转换为JS对象,并将其保存为Request对象的query属性。

    如果这样不好理解的话,中间件也可以这样分为三大类:

    1>pre-request —— 通常用来该项reques的原始数据

    2>reqest(请求)response(响应) —— 大部分中间件都在这里,为reqres的拓展方法,功能各异。

    3>post-response —— 全局异常处理,改写response数据等。

    三、中间件的理解

    最后,我们再来分析一下从浏览器地址栏输如url到客户端显示数据之间这个过程到底发生了什么。

    浏览器向服务器发送了一个请求后,服务器首先收到req的数据请求,然后服务端进行处理,处理完了之后发送res响应回去,这中间就一定有一个函数将这些数据做了处理,这个处理数据的函数,就是中间件,而中间件执行的顺序就是你定义的顺序。由此可见,中间件可以这么理解:

    1、封装了一些处理一个完整事件的功能函数。

    2、非内置的中间件需要通过安装后,req到文件就可以运行。

    3、封装了一些复杂但肯定通用的功能。

  • 相关阅读:
    c语言中重要函数
    python 类属性、对象属性
    windows下PIP安装模块编码错误解决
    python爬取百思不得姐视频
    ubuntu下刷新dns
    pycharm设置安装python第三方插件
    python将str转换成字典
    pyqt加载图片
    Python端口扫描器
    自己构造用于异步请求的JSON数据
  • 原文地址:https://www.cnblogs.com/-Bloom/p/10259846.html
Copyright © 2011-2022 走看看