静态资源(Static File)
静态资源一般用来托管前端文件(js/css/html/png)等。
在 @midwayjs/web 使用
Egg.js 默认提供了 static 插件,只需配置插件启用即可。
// src/config/plugin.ts
exports.static = true;
egg-static 插件基于 koa-static-cache 模块,支持其所有的配置。
插件默认的 config 配置为:
{
prefix: '/public/',
dir: path.join(appInfo.baseDir, 'app/public'),
}
prefix
表示 URL 路径前缀,dir 表示静态文件存放的位置。比如 ${baseDir}/app/public/a.js
这个文件,在开启插件后,所访问的 URL 为 http://127.0.0.1:7001/public/a.js
。
更多配置,请查看 koa-static-cache 文档。
在 @midwayjs/koa 使用
和 Egg.js 类似,我们可以直接引入 koa-static-cache 模块。
$ npm i koa-static-cache --save
然后在 configuration.ts
中直接加入中间件即可。
下面的示例,我们将资源目录放到了项目目录下的 public 目录中。
// src/configuration.ts
import { Configuration, App } from '@midwayjs/decorator';
import { Application } from '@midwayjs/koa';
import * as staticCache from 'koa-static-cache';
@Configuration()
export class AutoConfiguration {
@App()
app: Application;
async onReady() {
this.app.use(
staticCache({
prefix: '/public/',
dir: path.join(this.app.getAppDir(), 'public'),
})
);
}
}
更多配置,请查看 koa-static-cache 文档。
在 @midwayjs/express 使用
Express 中自带了 static 的支持,直接在 configuration.ts
中直接加入中间件即可。
// src/configuration.ts
import { Configuration, App } from '@midwayjs/decorator';
import { Application } from '@midwayjs/express';
import * as express from 'express';
@Configuration()
export class AutoConfiguration {
@App()
app: Application;
async onReady() {
this.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 相对于静态目录查找文件,因此静态目录的名称不是此 URL 的一部分。
如果你想修改路由,可以通过下面的 API。
app.use('/static', express.static(path.join(__dirname, 'public')));