@ceicc/range
v3.0.2
Published
http range request handler
Readme
Range
Middleware for serving static files
Installation
npm i @ceicc/rangeUsage
add range to an existence express app
import { range } from "@ceicc/range"
app.get('/public/*', range())
app.listen(3000)This will serve every request starts with /public/ with range.
The base directory will be . or the current working directory, unless specified in the options object.
Options Object
maxAge
- default:
10800 - type:
number
caching period in seconds.
etag
- default:
true - type:
boolean
add Etag header.
lastModified
- default:
true - type:
boolean
add last-modified header.
conditional
- default:
true - type:
boolean
whether to respect conditional requests or not.
range
- default:
true - type:
boolean
accept range request.
notFound
- default:
true - type:
boolean|string
a handler for non existing files
notFound: false next will be called.
notFound: true empty body with status code '404' will be sent.
notFound: <string> send a file with status code '404', the given string is the path to file.
if the path doesn't led to a file, next will be called.
Note: The path is relative to the baseDir path.
implicitIndex
- default:
true - type:
boolean|Array<string>
Check for index files if the request path is a directory.
Pass an array of extensions to check against. e.g. ["html", "css"]
Or simply pass true to check for html extension only.
baseDir
- default:
'.' - type:
string
the base dirctory.
hushErrors
- default:
false - type:
boolean
Whether to ignore errors and reply with status code 500, or pass the error to next function.
trailingSlash
- default:
true - type:
boolean
Redirect directory requests to add trailing slash.
disabling this option will led to relative path issues. see #9
implicitIndex must be true
compression
- default:
false - type:
false|Array<string>
Compress the response body with one of the compression algorithm given in the array.
availabel compression methods are:
"br""gzip""deflate"
the compression method will be determined based on the request's accept-encoding header using npm package negotiator.
dateHeader
- default:
true - type:
boolean
send date response header, new Date().toUTCString() function will be used to get the current date.
learn more about the date header
Real World Example
import { fileURLToPath } from "node:url"
import { join, dirname } from "node:path"
import express from "express"
import { range } from "@ceicc/range"
const app = express()
const __dirname = dirname(fileURLToPath(import.meta.url))
app.get('*', range({ baseDir: join(__dirname, "public") }))
app.use((error, req, res, next) => {
console.error(error)
res.sendStatus(500)
})
app.listen(3000, () => console.log("server listening on http://localhost:3000"))