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.
Install with npm
> npm install express-preconditions --save
Include the following in your server startup
const preconditions = require('express-preconditions')
app.use(preconditions())or
const preconditions = require('express-preconditions')
const options = { ... }
app.use(preconditions(options))See our test server for more details.
| 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. |
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.
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. |
- The
If-Rangeheader is not currently supported.
The MIT license.
Copyright © 2016 Richard Schneider (makaretu@gmail.com)