4.0.2 • Published 5 months ago

koa-files v4.0.2

Weekly downloads
63
License
MIT
Repository
github
Last release
5 months ago

koa-files

A static files serving middleware for koa.

NPM Version Download Status Languages Status Node Version License

Installation

$ npm install koa-files

API

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

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

interface IgnoreFunction {
  (path: string): boolean | Promise<boolean>;
}

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 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 { server } from 'koa-files';

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

// Static files server
app.use(
  server('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.2

9 months ago

4.0.1

8 months ago

4.0.0

8 months ago

4.0.2

5 months ago

3.2.1

10 months ago

3.2.0

10 months ago

3.1.11

10 months ago

3.1.10

10 months ago

3.1.9

10 months ago

3.1.8

10 months ago

3.0.7

10 months ago

3.0.6

10 months ago

3.0.5

11 months ago

3.1.3

10 months ago

3.1.2

10 months ago

3.1.1

10 months ago

3.1.0

10 months ago

3.1.7

10 months ago

3.1.6

10 months ago

3.1.5

10 months ago

3.1.4

10 months ago

3.0.4

1 year ago

3.0.3

1 year ago

3.0.2

1 year ago

3.0.1

1 year ago

3.0.0

1 year ago

2.3.8

1 year ago

2.3.7

1 year ago

2.3.2

3 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

3 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

4 years ago

1.0.3

5 years ago

1.0.2

5 years ago

1.0.1

5 years ago

1.0.0

6 years ago

0.3.3

6 years ago

0.3.2

6 years ago

0.3.0

6 years ago

0.3.1

6 years ago

0.2.1

6 years ago

0.2.2

6 years ago

0.2.0

6 years ago

0.1.0

6 years ago

0.0.1

6 years ago

0.0.0

6 years ago