Skip to content

静态文件

如果找不到合适的地方存储前端文件,则利用现有服务分发能降低复杂度,还能免去跨域的烦恼

安装

bash
pnpm add @aomex/serve-static

使用

typescript
import { WebApp } from '@aomex/web';
import { serveStatic } from '@aomex/serve-static';

const app = new WebApp({
  mount: [serveStatic({ root: '/public' })],
});

如果项目下有一个文件/public/foo.txt,则可以访问:http://localhost:3000/foo.txt

参数

root

类型:string

服务的根目录,请勿设置成根目录,否则源码可能被访问

indexFile

类型:string
默认值:index.html

没有指定文件名时,自动访问这个文件

useCompressedFile

类型:boolean
默认值:true

使用压缩过后的文件,如果未找到则继续使用源文件。支持后缀:

  • .gz
  • .br

cacheControl

类型:object

设置 Cache-Control 报文,参考 MDN

> publicOrPrivate

类型:public | private
默认值:public

是否共享缓存

  • public 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,即使是通常不可缓存的内容。(例如:1.该响应没有max-age指令或Expires消息头;2. 该响应对应的请求方法是 POST 。)
  • private 表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器

> maxAge

类型:number
默认值:0

缓存的内容将在N毫秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高

> immutable

类型:boolean
默认值:false

表示响应正文不会随时间而改变。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match或 If-Modified-Since)来检查更新,即使用户显式地刷新页面

> noCache

类型:boolean
默认值:false

在发布缓存副本之前,强制要求缓存把请求提交给原始服务器进行验证 (协商缓存验证)

> noStore

类型:boolean
默认值:false

缓存不应存储有关客户端请求或服务器响应的任何内容,即不使用任何缓存