123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- 'use strict';
- /**
- * Module dependencies.
- */
- const resolve = require('path').resolve;
- const assert = require('assert');
- const debug = require('debug')('koa-static');
- 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(next){
- if (this.method == 'HEAD' || this.method == 'GET') {
- if (yield send(this, this.path, opts)) return;
- }
- yield* next;
- };
- }
- return function *serve(next){
- yield* next;
- if (this.method != 'HEAD' && this.method != 'GET') return;
- // response is already handled
- if (this.body != null || this.status != 404) return;
- yield send(this, this.path, opts);
- };
- }
|