Middleware for HTTP Conditional Requests (RFC 7232)

express, condition, conditional, If-Match, If-None-Match, If-Modified-Since, If-Unmodified-Since, If-Range, request, 7232, rfc7232, precondition
npm install express-preconditions@1.0.5


Conditional Requests

Travis build status Coverage Status npm version

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


Include the following in your server startup

    const preconditions = require('express-preconditions')


    const preconditions = require('express-preconditions')
    const 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.

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.


  • The If-Range header is not currently supported.


The MIT license.

Copyright © 2016 Richard Schneider (