A static files serving middleware for koa.
import { Middleware } from 'koa'; import fs, { Stats } from 'node:fs'; interface Headers { [key: string]: string | string[]; } interface IgnoreFunction { (path: string): Promise<boolean> | boolean; } interface HighWaterMarkFunction { (path: string, stats: Stats): Promise<number> | number; } 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 { etag?: boolean; defer?: boolean; fs?: FileSystem; acceptRanges?: boolean; lastModified?: boolean; ignore?: IgnoreFunction; headers?: Headers | HeadersFunction; highWaterMark?: number | HighWaterMarkFunction; } export function server(root: string, options?: Options): Middleware;
node:fs
.false
.await next()
.true
.headers
.true
.headers
.true
.headers
.65536
(64 KiB).undefined
.undefined
./** * @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}`); });
Support multipart range and download resumption.
MIT
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4