serve-static
静态文件托管服务中间,提供从给定的根目录中提供文件。要提供的文件将通过将 req.url 与提供的根目录组合来确定。当找不到文件时,该模块不会发送 404 响应,而是调用 next() 以继续下一个中间件,从而允许堆叠和回退。 用法如下:
serveStatic(root, options);
root
为需要托管的静态跟目录,必传,且只能是一字符串,而options
的参数定义如下:
属性 | 默认值 | 类型 | 描述 |
---|---|---|---|
acceptRanges | true | boolean | 禁用此选项不会发送 Accept-Ranges 并忽略 Range 请求标头的内容 |
cacheControl | true | boolean | 启用或禁用设置 Cache-Control 响应头,禁用此选项将忽略不可变和 maxAge 选项。 |
dotfiles | ignore | string | 设置遇到“点文件”时如何处理。点文件是以点(“.”)开头的文件或目录。 |
etag | true | boolean | 启用或禁用 etag 生成 |
extensions | false | false/array | 设置文件扩展名后备。设置后,如果未找到文件,则将给定的扩展名添加到文件名中并进行搜索。将提供第一个存在的。示例:['html', 'htm']。 |
fallthrough | true | boolean | 是否映射多个目录到同一个web地址 |
immutable | false | boolean | 在 Cache-Control 响应头中启用或禁用不可变指令,如果设置为 true,则还应指定 maxAge 选项以启用缓存。 immutable 指令将阻止受支持的客户端在 maxAge 选项的生命周期内发出条件请求以检查文件是否已更改 |
index | true | boolean | 一般情况下,将发送index.html作为对应的目录请求 |
lastModified | true | boolean | 启用或禁用Last-Modified标头,使用文件系统的最后修改值 |
maxAge | 0 | number | 为 http 缓存提供一个以毫秒为单位的 max-age,也可以是 ms 模块接受的字符串 |
redirect | true | boolean | 当路径名是目录时,重定向到目录名/ |
setHeaders | null | function | 在响应中设置自定义header的功能,对header的更改需要同步触发,一般以fn(res, path, stat) 的形式来调用 |
serve-static用法
- 作为普通的资源文件的托管服务
var finalhandler = require('finalhandler') var http = require('http') var serveStatic = require('serve-static') var serve = serveStatic('public/ftp', { index: ['index.html', 'index.htm'] }) var server = http.createServer((req, res) => { serve(req, res, finalhandler(req, res)); }) server.listen(3000)
- 作为下载的托管服务
var contentDisposition = require('content-disposition') var finalhandler = require('finalhandler') var http = require('http') var serveStatic = require('serve-static') var serve = serveStatic('public/ftp', { index: false, setHeaders: setHeaders }) // 通过重写headers来对客户端输出下载资源的动作 function setHeaders (res, path) { res.setHeader('Content-Disposition', contentDisposition(path)) } var server = http.createServer(function onRequest (req, res) { serve(req, res, finalhandler(req, res)) }) server.listen(3000)
- 多目录映射托管 ```javascript var finalhandler = require('finalhandler') var http = require('http'); var connect = require('connect'); var serveStatic = require('serve-static')
var app = connect(); app.use(serveStatic('public/ftp', { index: ['index.html', 'index.htm'] })); app.use(serveStatic('public/res')); var server = http.createServer((req, res) => { finalhandler(req, res); }); server.listen(3000) ```
依赖的核心库send
Send 是一个库,用于将文件系统中的文件作为 http 响应流式传输,支持部分响应(范围)、条件 GET 协商(If-Match、If-Unmodified-Since、If-None-Match、If-Modified-Since),高测试覆盖率和精细事件,可用于在您的应用程序或框架中采取适当的行动