Conditional Requests
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 --save
Usage
Include the following in your server startup
const preconditions = app
or
const preconditions = const options = ... app
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. |
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.
Copyright © 2016 Richard Schneider (makaretu@gmail.com)