koa 静态资源处理
本文将介绍 koa 静态资源处理。
如今有静态资源(dist/index.html
):
1 |
|
和dist/index.js
1 | console.log('Hello World'); |
koa-static
如果网站提供静态资源(图片、字体、样式表、脚本……),为它们一个个写路由就很麻烦,也没必要。koa-static
模块封装了这部分的请求,起到了静态文件托管的作用。
示例代码如下:
1 | import Koa from 'koa'; |
运行上述代码后访问http://localhost:3000
,在浏览器上即可看到这个网址内容,默认加载index.html
文件。
访问http://localhost:3000/index.js
Koa 会在静态资源目录下查找文件,所以不会把静态目录作为 URL 的一部分。
虚拟静态目录
如果要给静态资源文件创建一个虚拟的文件前缀(实际上文件系统中并不存在) ,可以使用koa-mount
中间件指定一个虚拟的静态目录。
koa-mount 是一个将中间件挂载到指定路径的 Koa 中间件。它可以挂载任意 Koa 中间件.
语法如下:
1 | import koaMount from 'koa-mount'; |
访问http://localhost:3000/koa-static
即可看到文件内容,
访问http://localhost:3000/koa-static/index.js
小 Tip:在部署打包好的 react 项目时,前端使用的是 HTML5 的 history,页面一刷新就 404 了,所以后端配置koa-history-api-fallback中间件来支持:(中间件实现的功能是如果 当 URL 匹配不到任何静态资源,返回指定的页面(中间件默认返回的是 index.html,配置参考文档)
1
2
3
4
5
6
7
8 import historyApiFallback from 'koa-history-api-fallback';
// 加载路由信息
app.use(router.routes());
app.use(router.allowedMethods());
app.use(historyApiFallback());
app.use(koaStatic(path.resolve(__dirname, '../public')));historyApiFallback 一定要放在所有接口路由后面,否则所有接口都是返回 index.html 了。
historyApiFallback 一定要在静态资源前面,否则资源找不到
koa-static-cache
这个中间件的目的也是帮助我们托管静态资源文件。按照配置的路径在浏览器的 URL 地址中输入带prefix
前缀的路径就能访问到 static 目录下的文件。和koa-static
区别是:
示例代码:
1 | import koaStaticCache from 'koa-static-cache'; |
当我们访问http://localhost:3000/koa-static/index.html
,这个时候中间件就会将我们的请求代理到dist
文件夹下的index.html
,读取文件,自动识别 MIME 类型,然后进行响应。
访问http://localhost:3000/koa-static/index.js