zoukankan      html  css  js  c++  java
  • nodeJs,Express中间件是什么与常见中间件

    中间件的功能和分类

          中间件的本质就是一个函数,在收到请求和返回相应的过程中做一些我们想做的事情。Express文档中对它的作用是这么描述的:

    执行任何代码。
    修改请求和响应对象。
    终结请求-响应循环。
    调用堆栈中的下一个中间件。

    分类

          Express文档中把他们分为了五类,但是他们的原理相同,只是用法不同:

    应用级中间件
    路由级中间件
    错误处理中间件
    内置中间件
    第三方中间件

    下面介绍常用中间件

    express.static()

    这是一个用来返回静态文件的自带中间件,不需要下载
    就是一方法,直接往use()里面加
    express.static(root, [options]) 第一个参数是静态文件存储的目录

    let server = express();//创建server,直接调用函数就行
    server.use(express.static('./static/'));
    server.listen('8080');

    处理之后,前端就可以在root目录中访问静态文件了

    body-parser:

    用于解析post数据,这玩意er执行后会往req里面塞一个body,body里面就有处理好的数据

    //所有的post请求都经过这个中间件
    server.post('*',parser.urlencoded({
      extended: false //给个属性,一般不开
    }))
    server.post('/reg',(req,res) => {
      console.log(req.body);//在这就可以使用解析好的body数据
    })

    multer:处理文件上传 

    添加之后,会往req加一个files属性

    const multer = require('multer')
    let obj = multer({
      dest: '上传的文件所放的路径'
    })
    server.post(obj.any());//添加之后,会往req加一个files属性

    cookie-parser 

    用来操作cookie

    const cookieParser = require('cookie-parser');//一个方法
    server.use(cookieParser());//使用之后可使用req.cookie()方法,req.signedCookies
    server.get('/a',(req,res) => {
      console.log(req.cookies);
      res.cookie('a',998);//用于设置cookie
      res.send('over');
    })

    cookie方法的使用:
    res.cookie(键,值)
    res.cookie(键,值,{options})
    options: 可选择添加的配置

    • domain:域名
    • path:路径,一般给个/
    • maxAge:最大时长
    • httpOnly:true 只有服务器能看到
    • secure: true //只有https能用
    • signed:true //是否签名

    cookie-session: 

    express中用于处理session的中间件

    const cookieSession = require('cookie-session');
    server.use(cookieSession({
      keys:['1sfdsa44','asdfdaf'...]//循环密钥
      maxAge:多久过期
    }))

    使用之后可以使用req.session['键']获取或设置session

    关于cookie和session的理解:

    用户的cookie -> 服务器的密钥签名 -> session_id -> 通过cookie+session_id访问服务器 -> 使用密钥校验cookie和session_id是否匹配

    session就像一张身份证,防止有人伪造cookie访问服务器

  • 相关阅读:
    BZOJ 2064: 分裂( 状压dp )
    BZOJ 2096: [Poi2010]Pilots( set )
    BZOJ 3444: 最后的晚餐( )
    BZOJ 3156: 防御准备( dp + 斜率优化 )
    BZOJ 1770: [Usaco2009 Nov]lights 燈( 高斯消元 )
    BZOJ 2466: [中山市选2009]树( 高斯消元 )
    BZOJ 1316: 树上的询问( 点分治 + 平衡树 )
    codevs 1074
    bzoj 1015
    bzoj 1798
  • 原文地址:https://www.cnblogs.com/magicg/p/12749124.html
Copyright © 2011-2022 走看看