koa-static是一个koa-send的封装,所以重点其实是koa-send.
koa-send会接收三个参数,ctx,path与opt.
其中path是访问的url.opt.root是我们设置的静态资源根路径,他会被赋值给root.
path和root会被path的join和normalize拼接成一个规范化的路径并赋值给path.这个path用来查找要传输的文件.
stats = await fs.stat(path)
如果他是一个目录,那么就在那个目录下查找是否有index.html文件.
if (stats.isDirectory()) {
if (format && index) {
// index为opt.index->index.html
path += '/' + index
stats = await fs.stat(path)
} else {
return
}
}
之后会用该path来创建一个可读流,用于向客户端传递数据.
ctx.body = fs.createReadStream(path)
整个send模块就是这样了,koa-static的功能也是由它实现的.