~ 静态资源托管 express.static

express.static 是 Express 唯一内置的中间件,负责在 Express 应用中提托管静态资源,例如图片、CSS、JS 文件等。


express.static(root, [options])

参数 root 指提供静态资源的根目录,可选的 options 参数拥有如下属性:

属性          类型      缺省值     描述
dotfiles      String   “ignore”   是否对外输出文件名以点开头的文件。可选值为allow、deny和ignore
etag          Boolean   true     是否启用 etag 生成
extensions    Array    []       设置文件扩展名备份选项
index          Mixed    “index.html” 发送目录索引文件,设置为 false 禁用目录索引。
lastModified    Boolean  true  设置Last-Modified头为文件在操作系统上的最后修改日期。可选值为true或false
maxAge          Number   0       以毫秒或者其字符串格式设置 Cache-Control 头的 max-age 属性。
redirect        Boolean  true     当路径为目录时,重定向至 “/”。
setHeaders      Function          设置 HTTP 头以提供文件的函数。
var options = {
  etag: false,
  extensions: ['htm', 'html'],
  index: false,
  maxAge: '1d',
  redirect: false,
  setHeaders: function (res, path, stat) {
    res.set('x-timestamp', Date.now());
  }
}
app.use(express.static('public', options));

一般地,如果不需要特殊的设置,将静态资源文件所在的目录作为参数传递给 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.static 中间件:

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

访问静态资源文件时,express.static 中间件会根据目录添加的顺序查找所需的文件。

如果希望所有通过 express.static 访问的文件都存放在一个“虚拟(virtual)”目录(即目录根本不存在)下面,可以通过为静态资源目录指定一个挂载路径的方式来实现,如下所示:

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