express.static() 方法
在构建Web应用时,我们经常需要提供静态文件,如图片、CSS和JavaScript文件。Express框架提供了一个内置的中间件函数express.static
,它专门用于这个目的。
一、什么是 express.static()
express.static
是Express框架中的一个内置中间件,它用于提供静态文件。这个中间件基于serve-static
,并且通过指定的根目录来确定要提供的文件。
二、如何使用 express.static()
使用express.static
非常简单。你只需要指定一个根目录root
,Express就会从这个目录中提供静态文件。如果请求的文件不存在,它不会立即返回404错误,而是调用next()
函数,这样你就可以在链中添加更多的中间件来处理请求。
三、options 可选项
express.static
允许你通过一个options对象来自定义其行为:
属性 | 描述 | 类型 | 默认值 |
---|---|---|---|
dotfiles | 决定如何处理以点(. )开头的文件或目录。 | 字符串 | “ignore” |
etag | 启用或禁用etag生成。 | 布尔值 | true |
extensions | 设置文件扩展名回退。如果找不到文件,搜索指定扩展名的文件并提供第一个找到的文件。 | 混合类型 | false |
fallthrough | 允许客户端错误作为未处理请求通过,否则转发客户端错误。 | 布尔值 | true |
immutable | 启用或禁用Cache-Control响应头中的immutable指令。 | 布尔值 | false |
index | 发送指定的目录索引文件。设置为false以禁用目录索引。 | 混合类型 | “index.html” |
lastModified | 设置Last-Modified头为文件在操作系统上的最后修改日期。 | 布尔值 | true |
maxAge | 设置Cache-Control头中的max-age属性,单位为毫秒或ms格式的字符串。 | 数字 | 0 |
redirect | 当路径名是目录时,重定向到尾部的”/”。 | 布尔值 | true |
setHeaders | 设置随文件一起提供的HTTP头的函数。 | 函数 |
特殊说明
- dotfiles: 这个选项决定了如何处理以点(
.
)开头的文件或目录。可能的值为 “allow”(不特别处理点文件)、”deny”(拒绝请求点文件,并响应403错误)、”ignore”(假装点文件不存在,并响应404错误)。 - fallthrough: 当设置为true时,如请求一个不存在的文件或一个错误的请求,中间件将调用
next()
来处理链中的下一个中间件。设置为false时,即使是404错误也会调用next(err)
。 - setHeaders: 这个选项允许你指定一个函数来设置自定义的响应头。对头的修改必须同步进行。
四、示例
下面是一个使用express.static
中间件函数的示例:
var options = {
dotfiles: 'ignore', // 忽略点文件
etag: false, // 不生成etag
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)) // 使用静态文件中间件