zoukankan      html  css  js  c++  java
  • Express4.x动态的销毁或者替换中间件(app.unuse)

    需求描述

    expres4.x托管静态资源时以中间件的方式将server-static挂载到app上,正常的使用没有问题,但是有时候我们需要动态的托管一些静态资源,也就是静态资源的目录不确定的时候该怎么托管静态资源?

    解决办法

    var express=require("express");
    
    var app=express();
    
    app.use(xxx)
    
    ...
    
    app.listen(port,callback);
    

    在上面代码中的代码中app是express的一个是实例,app所挂载的"中间件"以及"路由"都在app._router.stack这个数组变量里面,每个"中间件",或者"路由"都是一个对象,他们以数组元素的形式存在app._router里面。

    "中间件",或者"路由"的对象结构
    //这是一个express.static();中间件在app._router.stack里面存储的数据结构
    //pathToRegexp=require("path-to-regexp");
    
    {
        handle: [Function: serveStatic]
        //中间件回调函数,比如: app.use(express.static("/public")),那么这里的handle=express.static("/public")
    
        name: 'serveStatic',
        //中间件的函数名,或者路由的函数名,假设中间件为 fn,那么name=fn.name
    
        params: undefined,
    
        path: undefined,
    
        keys: [],
    
        regexp: /^/theme/?(?=/|$)/i,
        //匹配的路径,比如: app.use("/static",express.static("/public"));这里的regexp=pathToRegexp("/static");
    
        route: undefined
    }
    

    知道了中间件数据的存储结构后,我们就可以很方便的销毁中间或者替换中间件,或者自己实现app.unuse()函数了

    具体操作

    1. 销毁中间件,找到对应的中间件对象,删除元素,
    
    2. 替换中间件,找到对应的中间件对象,重写handle,regexp属性
    
    3. 动态添加,老办法,使用app.use()
  • 相关阅读:
    iOS js交互
    崩溃!UIAlertController 引起的崩溃
    跳转到AppStore下载app
    installshield basic msi 更新时覆盖不了上一个版本文件解决方案1
    用ILMerge.exe合并dll
    获取某几个分类下的前N条数据 mssql语句
    计算网络文件的大小
    英语 2018-12-04 2法国燃料涨价抗议活动
    英语2018-12-04
    从一个故事说起,谈谈企业应用架构的演变史
  • 原文地址:https://www.cnblogs.com/hlere/p/6509413.html
Copyright © 2011-2022 走看看