npm.io
3.0.2 • Published 3 years ago

@ceicc/range

Licence
MIT
Version
3.0.2
Deps
3
Size
17 kB
Vulns
0
Weekly
0

Range

Middleware for serving static files

NPM Downloads per month Module type

Installation

npm i @ceicc/range

Usage

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:

  1. "br"
  2. "gzip"
  3. "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"))

Keywords