112 lines
3.5 KiB
Markdown
112 lines
3.5 KiB
Markdown
# file-server
|
|
|
|
Simple http file server that supports files and directories
|
|
|
|
## Example
|
|
|
|
```javascript
|
|
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.
|
|
|
|
```javascript
|
|
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.
|
|
|
|
```javascript
|
|
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.
|
|
|
|
```javascript
|
|
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`
|
|
```javascript
|
|
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.
|
|
|
|
```javascript
|
|
|
|
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');
|
|
});
|
|
});
|
|
``` |