其实还是得按自个儿的需求来。
koa-static 有啥问题么
koa-static
是一个非常轻量的koa
中间件,能够迅速的搭建起一个静态文件服务器,通常我们把静态文件都放进public
,并且通过类似koa-static
这样的东西来将我们的public
作为静态目录,这样的话,我们就能直接通过根路由进行访问了。
emmmm,扯多了。回到正轨
首先koa-static
不能映射到其他的路由上,一般是跟路由,比如访问 public/main.html
(假设 public 为静态目录),那么就可以通过 host:port/main.html
进行访问得到 main.html
,但是有时候我不想映射到根路由,这时候,koa-static
就显得力不从心了。
第二个问题是koa-static
只支持GET
和HEAD
两个 HTTP 方法来进行访问,这在大多数场景下是有用的,但是难免会遇到一些特别的场景,比如你想用POST
方法来拿到服务器上的静态文件(如果你想)。
awesome-static
吼,所以我做了awesome-static
,awesome-static
和koa-static
一样,都是对 koa-send
的一层封装,只不过awesome-static
用 Typescript
编写,对 VSCode 支持良好。
awesome-static
扩充了koa-static
的 options
,添加了两个字段
- route
- allowMethods
route
为要映射到的路由,allowMethods
是要允许的 HTTP 方法
这两个字段都是可选的,route
的默认值就是根路由,allowMethods
的默认值为 HEAD
和 GET
,所以你能像使用 koa-static
一样的使用 awesome-static
。
看一下使用方法
const Koa = require('koa');
const app = new Koa();
const { AwesomeStatic } = require('awesome-static');
app.use(AwesomeStatic('public'));
app.listen(8888);
在 public
下有一个 html
文件,下面是 public 的目录结构
public
└── main.html
在启动服务器后就能通过http://localhost:8888/main.html
进行访问了
现在来配置一下 route
const Koa = require('koa');
const app = new Koa();
const { AwesomeStatic } = require('awesome-static');
app.use(AwesomeStatic('public', {
route:"static"
}));
app.listen(8888);
配置了 route
为 static
那么现在访问 main.html
就需要访问http://localhost:8888/static/main.html
如果再配置一下 allowMethods
,来设置一下允许的 HTTP 方法,让它只能通过POST
来访问
const Koa = require('koa');
const app = new Koa();
const { AwesomeStatic } = require('awesome-static');
app.use(AwesomeStatic('public', {
route:"static",
allowMethods:["POST"]
}));
app.listen(8888);
现在再通过 http://localhost:8888/static/main.html
就会去 404
了~
来模拟一个 POST
请求
curl http://localhost:8888/static/main.html -X POST
Output:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<h1>Main</h1>
</body>
</html>
Github
https://github.com/HaoDaWang/awesome-static
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。