需求描述

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()

Express4.x动态的销毁或者替换中间件(app.unuse)的更多相关文章

  1. unity3d通过代码动态创建销毁游戏对象

    只能动态创建内部提供的游戏对象,代码如下: //按下C后创建 if (Input.GetKeyDown (KeyCode.C)) { GameObject s1 = GameObject.Create ...

  2. scrapy实战4 GET方法抓取ajax动态页面(以糗事百科APP为例子):

    一般来说爬虫类框架抓取Ajax动态页面都是通过一些第三方的webkit库去手动执行html页面中的js代码, 最后将生产的html代码交给spider分析.本篇文章则是通过利用fiddler抓包获取j ...

  3. express4.x中路由中间件和挂载路径的关系

    express4.x 中一个路由中间件可以挂载到多个路由上,一个路由也可以绑定多个路由中间件,如: //多个路由匹配一个路由中间件 app.use(['/gre+t', '/hel{2}o'], gr ...

  4. Express4.x之中间件与路由详解及源码分析

    Application.use() Application.router() express核心源码模拟 一.express.use() 1.1app.use([path,] callback [, ...

  5. Scrapy 框架 使用 selenium 爬取动态加载内容

    使用 selenium 爬取动态加载内容 开启中间件 DOWNLOADER_MIDDLEWARES = { 'wangyiPro.middlewares.WangyiproDownloaderMidd ...

  6. 学习Nodejs:《Node.js开发指南》微博项目express2迁移至express4过程中填的坑

    <Node.js开发指南>项目地址https://github.com/BYVoid/microblog好不容易找到的基础版教程,但书中是基于express2的,而现在用的是express ...

  7. 理解Express中间件

    阅读目录 一:body-parser中间件 二:cookie-parser中间件 三:express-session 中间件 四:理解使用morgan记录操作日志 回到顶部 一:body-parser ...

  8. Fragment 创建及替换

    1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应 ...

  9. 9) 十分钟学会android--使用Fragment建立动态UI

    为了在 Android 上为用户提供动态的.多窗口的交互体验,需要将 UI 组件和 Activity 操作封装成模块进行使用,这样我们就可以在 Activity 中对这些模块进行切入切出操作.可以用  ...

随机推荐

  1. xdebug.var_display_max_data

    Xdebug Display Full Details on var_dump() Xdebug is an excellent addition to a PHP developers arsena ...

  2. Android应用性能优化方案

    1.避免创建不必要的对象 2.如果方法用不到成员变量,可以把方法声明为静态(static),这样性能会提高百分之十五到百分之二十 3.避免使用get/set存取字段,可以把字段声明为public直接访 ...

  3. Bootstrap3网上api文档地址

    http://v3.bootcss.com/css/#forms http://www.ziqiangxuetang.com/bootstrap/bootstrap-forms.html 另附加fa字 ...

  4. iOS开发之内存缓存机制

    使用缓存的目的是为了使用的应用程序能更快速的响应用户输入,是程序高效的运行.有时候我们需要将远程web服务器获取的数据缓存起来,减少对同一个url多次请求. 内存缓存我们可以使用sdk中的NSURLC ...

  5. treegrid.bootstrap使用说明

    treegrid.bootstrap使用说明 这个插件是用来做有层次的表格的,大概如图: 官网  http://maxazan.github.io/jquery-treegrid/ 使用这个控件之前需 ...

  6. aix下java程序运行问题

    CLASSPATH=/track.jar:/standalone.jar export CLASSPATH nohup /usr/java6_64/bin/java com.TrackMain > ...

  7. Canvas贝塞尔三级曲线

    两个控制点 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. Bootstrap入门(七)组件1:字体图标

    Bootstrap入门(七)组件1:字体图标   包括200个来自 Glyphicon Halflings 的字体图标,允许 Bootstrap 免费使用. 部分可用图标截图: 所有图标都需要一个基类 ...

  9. Android之com.nostra13.universalimageloader加载图片抛出OutOfMemroyError错误的多种解决办法

    com.nostra13.universalimageloader是用来加载图片非常好的框架,但是也有问题,一旦图片过多的话,很容易就会提示OutOfMemroyError错误,也就是内存溢出的问题, ...

  10. Intellij IDEA 建立文件夹目录问题

    问题: NEW一个package常出现文件夹层次问题 解决: 1.选中当前文件夹(要在该文件夹下添加): 2.右击此处: 3.添加即可. 链接:http://stackoverflow.com/que ...