express-preconditions-addl
v1.0.2
Published
Middleware for HTTP Conditional Requests (RFC 7232)
Downloads
9
Maintainers
Readme
Conditional Requests
This is a small extenstion to Richard Schneider's express-preconditions package.
Middleware for HTTP Conditional Requests (RFC 7232).
It conditionally processes a HTTP request based on a precondition (such as an etag or modification date).
A precondition is specified using the If-Match
, If-None-Match
, If-Modified-Since
or If-Unmodified-Since
HTTP header.
The change log is automatically produced with the help of semantic-release.
Getting started
Install with npm
> npm install express-preconditions-addl --save
Usage
Include the following in your server startup
const preconditions = require('express-preconditions-addl')
app.use(preconditions())
or
const preconditions = require('express-preconditions-addl')
const options = { ... }
app.use(preconditions(options))
See our test server for more details.
Options
Name | Description
:---- | :-----------
error | A function that takes (status code, message, req, res
) and sends an error response.
requiredWith | An array of HTTP methods that must include one of the precondition headers. This prevents the lost update issue. Defaults to ['PUT', 'PATCH', 'DELETE']
.
stateAsync | A function that takes (req)
and returns a Promise
to the get the assoiciated resource state.
forwardHeaders | Additional option added to existing express-preconditions package to support sending custom headers to HEAD request.Defaults to []
Resource state
The resource state contains the etag
and lastModified
properties, which conform to the respective HTTP headers
and can be undefined
.
The default stateAsync()
obtains the resource state by sending a HEAD
request to the server.
Status codes
The following HTTP status codes can be returned by the middleware
Code | Reason :---- | :------ 304 (Not Modified) | The resource has not been modified since the version specified by the precondition(s). 412 (Precondition Failed) | A precondition failed. 428 (Precondition Required) | A precondition header is required to avoid the lost update issue. 501 (Not implemented) | A precondition is not yet implemented.
TODO
- The
If-Range
header is not currently supported.
License
The MIT license.