看koa-static 这个中间件的源码。
module.
exports =
serve
function
serve (
root,
opts) {
opts =
Object.
assign({},
opts)
root是静态文件的根目录,不能为空,否则抛出异常。
opts是参数,参数可空,没有默认参数。但是参数必须是对象,如果不是对象,assign方法会抛出异常。
1.在js中函数没有重载的概念,如果声明了多个重名的函数,不管函数的形参个数是否一样,只有最有一个有效,其他的函数声明都是无效的。比如说声明了两个函数fn(),第一次声明时没有形参,第二次声明时形参有两个,则在调用fn()时不管有没有传入参数,都是调用后声明的那个函数。假如说调用时只传入了1个参数,例如fn(1),则1会赋给函数的第一个形参,而第二个形参不会赋值,如果有用到,就会当undefined处理,可能会报错。如果调用时传入了3个参数,例如fn(1,2,3),则1会赋给第一个形参,2会赋给第二个形参,3是用不上的,但是不会报错。
转自 https://www.cnblogs.com/daixiaotian/p/6423691.html
if (
opts.
index !==
false)
opts.
index =
opts.
index ||
'index.html'
if (!
opts.
defer) {
判断有两个,一个是指定index,只要不是明确写了index:false,则index为undefined或其他值,
opts.index !== false 都为真,也就是不指定的话,默认就是index.html,
一个是设置了defer。设置了defer的话,就其他中间件先处理。
try {
await
send(
ctx,
ctx.
path,
opts)
}
catch (
err) {
if (
err.
status !==
404) {
throw
err
}
如果找不到文件,不会抛出异常,只是返回404错误。