Express细节探究(1)——app.use(express.static)

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‘));
时间: 2025-01-07 08:06:01

Express细节探究(1)——app.use(express.static)的相关文章

express 4.x 模板引擎与express.static

前提:要在express中使用模块引擎需要将要使用的模板引擎安装在本项目,当然,express也是要安装的.在下面实例中,我使用的模板引擎是pug(一起叫做jade) 我的目录结构如下: 根目录为static,根目录下的public文件夹,是静态文件(如图片文件,css文件,js文件de)根目录.根目录下的view是模板文件的根目录.根目录中的app.js是启动文件, 代码如下: //引入必要的模块 //express.static是express 4.0中唯一的内置中间件,不需要额外引入 va

app.use(express.methodOverride(‘_method‘))执行报错

错误信息 F:\my_dev_work\todo\node_modules\express\lib\express.js:99       throw new Error('Most middleware (like ' + name + ') is no longer bundle             ^ Error: Most middleware (like methodOverride) is no longer bundled with Express a nd must be i

express 应用创建及app.js详解

#1 express 应用创建 1.安装node.js (自行百度) 2.全局安装express生成器 express-generator npm install express-generator -g 3.查看 express 版本,可以检查生成器 express-generator  是否安装成功  express -v 4.(可选)查看express 所有帮助指令及用法 express -h 5.cd 进入指定目录 workspace(任意命名)--------------这是系统cmd

nodejs使用express,express版本3.5.3使用中间件app.user(express.multipart())异常问题

Most middleware (like multipart) is no longer bundled with Express and must be installed separately....https://github.com/senchalabs/connect#middleware 版本问题 首先需要安装: npm install --save connect-multiparty 把 app.use(express.multipart()); 替换为 app.use(req

nodejs 使用app.use(express.bodyParser()); 出行异常----解决方法

异常代码: \Workspaces\WebStormProject\imooc-project\imooc>node app.js Error: Most middleware (like bodyParser) is no longer bundled with Express and must be installed separately. Please see https://github.com/senchalabs/connect#middleware. at Function.Ob

nodejs express template (模版)的使用 (ejs + express)

[javascript] view plaincopy var app=require("express").createServer(); app.set("view engine","ejs"); app.get("/",function(req,res) { res.render("index",{"title":"test"}); }); app.listen

Android 4.1 APP中的static变量即使在APP退出后仍然不会被擦除

Android 4.1 APP中的static变量即使在APP退出后仍然会保留最后赋值状态. public class MainActivity extends Activity { private TextView tv; private static int i=10; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVie

Nodejs express中创建ejs项目,解决express下默认创建jade,无法创建ejs问题

最近在看<Node.js开发指南>,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了, 书上命令为: ? 1 express -t ejs microblog 可是执行后,仍旧创建的是jade项目. 原来,express3.x,express4.x中创建ejs命令更新为: express -e microblog //即ejs,-j(即jade)  当然,最直接的,你也可以修改package.json里的定义来实现安装ejs. PS:建立工程过程 1.必须得安装expre

express在本地模式下:&#39;express&#39; 不是内部或外部命令,也不是可运行的程序或批处理文件。

今天突然来了兴致,准备玩玩nodeJS,安装nodeJS的时候没有任何问题,一路next就完成了. node -v 没问题 可以检测到版本号,node环境ok~ 本地模式安装express框架:npm install express 检测express是否安装成功:express -V 窗口打印出:'express' 不是内部或外部命令,也不是可运行的程序或批处理文件. 我去,一口老血吐出,什么情况... 经历了一番谷百后发现,因express默认安装是最新的版本,已经是4.x.x的版本.而最新