3.2.1 • Published 30 days ago

koa-files v3.2.1

Weekly downloads
63
License
MIT
Repository
github
Last release
30 days ago

koa-files

A static files serving middleware for koa.

NPM Version Download Status Languages Status Node Version

Installation

$ npm install koa-files

API

import { Middleware } from 'koa';
import fs, { Stats } from 'node:fs';

interface IgnoreFunction {
  (path: string): boolean;
}

interface Headers {
  [key: string]: string | string[];
}

interface HeadersFunction {
  (path: string, stats: Stats): Promise<Headers | void> | Headers | void;
}

export interface FileSystem {
  stat: typeof fs.stat;
  open: typeof fs.open;
  read: typeof fs.read;
  close: typeof fs.close;
}

export interface Options {
  fs?: FileSystem;
  defer?: boolean;
  etag?: boolean;
  acceptRanges?: boolean;
  lastModified?: boolean;
  highWaterMark?: number;
  ignore?: IgnoreFunction;
  headers?: Headers | HeadersFunction;
}

export default function server(root: string, options?: Options): Middleware;

root

  • Root directory string.
  • Nothing above this root directory can be served.

Options

fs
  • Defaults to node:fs.
  • The file system to used.
defer
  • Defaults to false.
  • If true, serves after await next().
  • Allowing any downstream middleware to respond first.
etag
  • Defaults to true.
  • Enable or disable etag generation.
  • Use weak etag internally.
  • Can be overridden by the headers.
acceptRanges
  • Defaults to true.
  • Enable or disable accepting ranged requests.
  • Disabling this will not send Accept-Ranges and ignore the contents of the Range request header.
  • Can be overridden by the headers.
lastModified
  • Defaults to true.
  • Enable or disable Last-Modified header.
  • Use the file system's last modified value.
  • Can be overridden by the headers.
highWaterMark
  • Defaults to 65536 (64 KiB).
  • Set the high water mark for the read stream.
ignore
  • Defaults to undefined.
  • Function that determines if a file should be ignored.
headers
  • Defaults to undefined.
  • Set headers to be sent.
  • See docs: Headers in MDN.

Example

/**
 * @module server
 * @license MIT
 * @author nuintun
 */

import Koa from 'koa';
import files from 'koa-files';

const app = new Koa();
const port = process.env.PORT || 80;

// Static files server
app.use(
  files('tests', {
    headers: {
      'Cache-Control': 'public, max-age=31557600'
    }
  })
);

/**
 * @function httpError
 * @param {NodeJS.ErrnoException} error
 * @returns {boolean}
 */
function httpError(error) {
  return /^(EOF|EPIPE|ECANCELED|ECONNRESET|ECONNABORTED)$/i.test(error.code);
}

// Listen error event
app.on('error', error => {
  !httpError(error) && console.error(error);
});

// Start server
app.listen(port, () => {
  console.log(`> server running at: 127.0.0.1:${port}`);
});

Features

Support multipart range and download resumption.

License

MIT

3.2.1

30 days ago

3.2.0

1 month ago

3.1.11

1 month ago

3.1.10

1 month ago

3.1.9

1 month ago

3.1.8

1 month ago

3.0.7

1 month ago

3.0.6

1 month ago

3.0.5

2 months ago

3.1.3

1 month ago

3.1.2

1 month ago

3.1.1

1 month ago

3.1.0

1 month ago

3.1.7

1 month ago

3.1.6

1 month ago

3.1.5

1 month ago

3.1.4

1 month ago

3.0.4

4 months ago

3.0.3

5 months ago

3.0.2

5 months ago

3.0.1

6 months ago

3.0.0

8 months ago

2.3.8

8 months ago

2.3.7

9 months ago

2.3.2

2 years ago

2.3.4

2 years ago

2.3.3

2 years ago

2.3.6

2 years ago

2.3.5

2 years ago

2.3.1

2 years ago

2.3.0

3 years ago

2.1.2

3 years ago

2.2.0

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

5 years ago

0.3.3

5 years ago

0.3.2

5 years ago

0.3.0

5 years ago

0.3.1

5 years ago

0.2.1

5 years ago

0.2.2

5 years ago

0.2.0

5 years ago

0.1.0

5 years ago

0.0.1

5 years ago

0.0.0

5 years ago