fcs
2025-04-10 0163870d662dc5b7d69ceff977490ede594f7d82
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
 
'use strict';
 
/**
 * Module dependencies.
 */
 
const debug = require('debug')('koa-static');
const resolve = require('path').resolve;
const assert = require('assert');
const send = require('koa-send');
 
/**
 * Expose `serve()`.
 */
 
module.exports = serve;
 
/**
 * Serve static files from `root`.
 *
 * @param {String} root
 * @param {Object} [opts]
 * @return {Function}
 * @api public
 */
 
function serve(root, opts) {
  opts = opts || {};
 
  assert(root, 'root directory is required to serve files');
 
  // options
  debug('static "%s" %j', root, opts);
  opts.root = resolve(root);
  if (opts.index !== false) opts.index = opts.index || 'index.html';
 
  if (!opts.defer) {
    return function serve(ctx, next){
      if (ctx.method == 'HEAD' || ctx.method == 'GET') {
        return send(ctx, ctx.path, opts).then(done => {
          if (!done) {
            return next();
          }
        });
      }
      return next();
    };
  }
 
  return function serve(ctx, next){
    return next().then(() => {
      if (ctx.method != 'HEAD' && ctx.method != 'GET') return;
      // response is already handled
      if (ctx.body != null || ctx.status != 404) return;
 
      return send(ctx, ctx.path, opts);
    });
  };
}