express相信是很多人用nodejs搭建服务器的首选框架,相关教程有很多,也教会了大家来如何使用。如果你想更深的了解他的细节,不妨和我一起来研究一下。

先来看一个每个人都用到的方法app.use(express.static(__dirname+'/public'));

你肯定在你的app文件中这么用过它:

  app.use(express.static(__dirname + '/public'));//设置静态文件目录

正如注释中写的那样,这句话的意思是,将静态文件目录设置为项目根目录+/public,当然你也可能是这么写的:

app.use(express.static(path.join(__dirname, 'public')));//和上面是一样的

运用path模块的join方法效果和前面是等价的,注意这里要引入path模块。

你有没有产生过疑问,为什么这句话能够帮我们设置静态文件目录呢?他到底做了些什么呢?

为了照顾初学者,我们不妨先从最基本的静态资源文件说起,什么是静态资源文件呢?

静态资源文件通俗的可以理解成对于不同的用户来说,内容都不会变化的文件。比如不管是张三李四还是王五访问百度,他们所接收到的看到的图片、css文件和前端javascript文件都是一样的,我们称这类文件为静态资源文件。

那么响应的,对于不同用户做出不同反应的就是动态文件了,张三李四王五登录百度,百度会分别对他们显示"你好张三"、"你好李四"、"你好王五",那么负责这么动态逻辑的文件就是动态文件了,根据你是用的技术不同,动态文件可能是.jsp文件、php文件或者我们node.js的服务器端js文件。

那么app.use()方法又干了什么事情呢,我们先来看看官方API怎么说的:

大意是说,app.use是用来给path注册中间函数的,这个path默认是'/',也就是处理任何请求,同时要注意的是他会处理path下的子路径,比如如果设置path为'/hello',那么当请求路径为'/hello/','/hello/nihao','/hello/bye'这样的请求都会交给中间函数处理的。

于是我们现在知道了app.use(express.static(__dirname + '/public'))是将所有请求,先交给express.static(__dirname + '/public')来处理一下,虽然我们暂时不知道express.static()的处理细节,但是这不影响我们做出一些推测,最起码我们可以知道,express.static()的返回值肯定是一个函数。

官方文档十分详尽,像我们解释了express.static()的一些细节,我简单的翻译给大家:

Serving static files in Express

为了提供对静态资源文件(图片、csss文件、javascript文件)的服务,请使用Express内置的中间函数 express.static 。

传递一个包含静态资源的目录给 express.static 中间件用于立刻开始提供文件。比如用以下代码来提供public目录下的图片、css文件和javascript文件:

app.use(express.static('public'));

现在,你可以加载 public目录下的文件了:

http://localhost:3000/images/kitten.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/images/bg.png
http://localhost:3000/hello.html

Express 会在静态资源目录下查找文件,所以不需要把静态目录作为URL的一部分。

通过多次使用 express.static 中间件来添加多个静态资源目录:

app.use(express.static('public'));
app.use(express.static('files'));

Express 将会按照你设置静态资源目录的顺序来查找静态资源文件。

为了给静态资源文件创建一个虚拟的文件前缀(实际上文件系统中并不存在) ,可以使用 express.static 函数指定一个虚拟的静态目录,就像下面这样:

app.use('/static', express.static('public'));

现在你可以使用 /static 作为前缀来加载 public 文件夹下的文件了。

http://localhost:3000/static/images/kitten.jpg
http://localhost:3000/static/css/style.css
http://localhost:3000/static/js/app.js
http://localhost:3000/static/images/bg.png
http://localhost:3000/static/hello.html

然而,你提供给 express.static 函数的路径是一个相对node进程启动位置的相对路径。如果你在其他的文件夹中启动express app,更稳妥的方式是使用静态资源文件夹的绝对路径:

app.use('/static', express.static(__dirname + '/public'));

express.static 作用及用法相关推荐

  1. Java中static作用及用法详解

    1.1概述: static是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存 ...

  2. Java中static作用及用法

    因为概述较为抽象,这里建议大家先看使用和总结,再看概述 概述 static又叫静态修饰符,大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内 ...

  3. static关键字的用法与作用

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  4. PHP中的常见魔术方法功能作用及用法实例

    这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...

  5. 、简述global关键字的作用_在C#编程中global关键字的作用及其用法

    在C#编程中,global 是 C# 2.0 中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它.今天就为大家展示下global关键字的作用及其用法,希望对大家学习C#编程有所帮助. 假设 ...

  6. C# this.Invoke()的作用与用法、不阻塞UI界面线程的延时函数

    一.this.Invoke()的作用与用法.不阻塞UI界面线程的延时函数 Invoke()的作用是:在应用程序的主线程上执行指定的委托.一般应用:在辅助线程中修改UI线程( 主线程 )中对象的属性时, ...

  7. static作用(修饰函数、局部变量、全局变量)

    C语言:static作用(修饰函数.局部变量.全局变量) 一. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.   全局 ...

  8. C语言:static作用(修饰函数、局部变量、全局变量)

    C语言:static作用(修饰函数.局部变量.全局变量) 一. static全局变量与普通的全局变量有什么区别 ? 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.  全局变 ...

  9. CyclicBarrie(循环栅栏)的作用与用法

    CyclicBarrie的作用与用法 一.CyclicBarrie的作用 CyclicBarrier循环栅栏(循环屏障)是一个多线程同步的辅助工具类,它允许一组线程在到达某个等待屏障点(common ...

最新文章

  1. conda安装tensorflow-gpu简洁版_笔记本的垃圾显卡也能装Tensorflow GPU版,简明教程
  2. python保留小数不四舍五入_Python3小数(浮点数)精度处理,[不]四舍五入去小数点后几位...
  3. python简单入门
  4. Leetcode1686. 石子游戏 VI[C++题解]:博弈论、按照a+b贪心
  5. C++primer 第 2 章 变量和基本类型
  6. python 定义变量_python-003-变量
  7. Linux mysql.plugin_Linux下MySQL安装
  8. jquery 固定导航
  9. 从病毒手里抢时间:百度研究院研发RNA测序算法检测速度提升120倍
  10. win10定时关机程序
  11. Python实现类似局域网QQ群聊
  12. 鲁棒控制器设计方法(systune,hinfsyn,musyn...)
  13. [经验教程]百度Robots检测:您的服务器配置有误,百度暂时无法连接您的服务器,请检查服务器的设置,确保您网站的服务器能被正常访问。
  14. 图片 360度旋转动画
  15. Jetson Xavier NX-EMMC重装系统
  16. cubase打开时,别的软件和网页无法正常播放视频。
  17. Java每周一记(2)
  18. L1-023 输出GPLT Python 团体程序设计天梯赛-练习集
  19. ppspp android编译,PPSSPP Windows和Android更新版本至1.1~~
  20. c++ - 第19节 - c++11

热门文章

  1. windows10上mysql5.7下载以及安装
  2. php _initialize __construct,Thinkphp5 _initialize() 和 _construct() 中无法Return
  3. web网页设计期末课程大作业:美食餐饮文化主题网站设计——HTML+CSS+JavaScript美食餐厅网站设计与实现 11页面
  4. NandFlash操作详解(一)
  5. centos搭建http服务器
  6. 计算机科学与技术 网瘾,曾经电击治疗网瘾的杨永信,受无数家长追捧,现在如何了?...
  7. 浙江移动数据中台的建设和应用实践
  8. iMeta期刊纸质版免费订阅(包邮)—第1期创刊收藏版(3月底截止)
  9. jQuery的立即执行函数
  10. xpath常用的定位方法