file-server
Simple http file server that supports files and directories
Example
const FileServer = require('file-server');
const fileServer = new FileServer((error, request, response) => {
response.statusCode = error.code || 500;
response.end(error);
});
const serveRobots = fileServer.serveFile('./robots.txt', 'text/plain');
require('http')
.createServer(serveRobots)
.listen(8080);
new FileServer(errorCallback, [cacheSize])
The FileServer constructor takes 2 arguments errorCallback
and an optional cacheSize
(bytes).
The callback gets 3 arguments (error, request, response)
cacheSize
defaults to 1024 * 1000
If the error argument was the result of a missing file the error will have a code
of 404. Other codes may be added in the future.
const FileServer = require('file-server');
const fileServer = new FileServer((error, request, response) => {
response.statusCode = error.code || 500;
response.end(error);
});
fileServer.serveFile(fileName, mimeType, [maxAge])
The serveFile
method takes 3 arguments fileName
, mimeType
and an optional maxAge
.
fileName
is the name of the file to serve.
mimeType
is a string, defining which mime type should be used.
maxAge
will defaults to 0 (rely on ETags)
This will return a function that takes a request
and a response
and will stream the file to the response, or in the case of an error, call the error callback passed in at construction.
const serveRobots = fileServer.serveFile('./robots.txt', 'text/plain');
serveRobots(request, response);
fileServer.serveDirectory(rootDirectory, mimeTypes, [maxAge])
The serveDirectory
method takes 3 arguments rootDirectory
, mimeTypes
and an optional maxAge
.
rootDirectory
is the base directory to serve files from. If a file above this directory is asked for the request will error with a 404.
mimeTypes
is an object keyed by extension, defining which mime type should be used for the extension. If a file is asked for with an extension that is not defined the request will error with a 404.
maxAge
will defaults to 0 (rely on ETags)
This will return a function that takes a request
, response
and a filename
and will stream the file to the response, or in the case of an error, call the error callback passed in at construction.
const serveImagesDirectory = fileServer.serveDirectory('./images', {
'.gif': 'image/gif',
'.png': 'image/png',
'.jpg': 'image/jpeg',
});
serveImagesDirectory(request, response, request.url);
If the fileName
argument is ommited, the filename will be automatically pulled from request.url
serveImagesDirectory(request, response);
Closing connections
File server automically closes any watchers on files or directories during process end. If you have a need for stopping and starting tha file server throughout a process (i.e. using jest), you may also programmatically close all open file watchers on the server 'close' event.
const fileServer = new FileServer((error, request, response) => {
response.statusCode = error.code || 500;
response.end(error);
});
// Your file serving setup
require('http')
.createServer(fileServer.serveDirectory('./images', {
'.gif': 'image/gif',
'.png': 'image/png',
'.jpg': 'image/jpeg',
}))
.listen(8080)
.on('close', () => {
fileServer.close(() => {
console.log('We have closed all file server connections');
});
});