# middleware-if-unless

> Invokes connect-like middleware if / unless routing criteria matches. Inspired on express-unless module.

Latest version **1.6.1** (published 2026-07-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install middleware-if-unless
pnpm add middleware-if-unless
yarn add middleware-if-unless
bun add middleware-if-unless
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 1.6.1 |
| Published | 2026-07-18 |
| First published | 2019-01-06 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=22.0.0 |
| Dependencies | 1 |
| Unpacked size | 12.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 4 |
| Author | Rolando Santamaria Maso |
| Maintainers | jkyberneees |
| Keywords | middleware, if, unless |

## Links

- npm: https://www.npmjs.com/package/middleware-if-unless
- Repository: https://github.com/BackendStack21/middleware-if-unless
- Homepage: https://iff-unless.21no.de/
- Issues: https://github.com/BackendStack21/middleware-if-unless/issues
- npm.io page: https://npm.io/package/middleware-if-unless

## Dependencies (1)

- [find-my-way](https://npm.io/package/find-my-way.md) ^9.5.0

## Alternatives

- [update-check](https://npm.io/package/update-check.md) — 4.0M weekly downloads
- [react-native-onesignal](https://npm.io/package/react-native-onesignal.md) — 134.5K weekly downloads
- [react-redux-toastr](https://npm.io/package/react-redux-toastr.md) — 33.7K weekly downloads
- [@nocobase/plugin-notification-manager](https://npm.io/package/@nocobase/plugin-notification-manager.md) — 2.0K weekly downloads
- [react-simple-toasts](https://npm.io/package/react-simple-toasts.md) — 1.9K weekly downloads

## Recent versions

- 1.6.1 (latest) — 2026-07-18
- 1.6.0 — 2026-03-29
- 1.5.0 — 2025-09-15
- 1.4.1 — 2024-09-21
- 1.4.0 — 2023-02-18
- 1.3.0 — 2022-04-24
- 1.2.5 — 2020-11-13
- 1.2.4 — 2020-03-15
- 1.2.3 — 2019-12-20
- 1.2.2 — 2019-09-29
- 1.2.1 — 2019-06-25
- 1.2.0 — 2019-01-09
- 1.1.0 — 2019-01-07
- 1.0.0 — 2019-01-06

## README

# Introduction
[![NPM version](https://badgen.net/npm/v/middleware-if-unless)](https://www.npmjs.com/package/middleware-if-unless)
[![NPM Total Downloads](https://badgen.net/npm/dt/middleware-if-unless)](https://www.npmjs.com/package/middleware-if-unless)
[![License](https://badgen.net/npm/license/middleware-if-unless)](https://www.npmjs.com/package/middleware-if-unless)
[![TypeScript support](https://badgen.net/npm/types/middleware-if-unless)](https://www.npmjs.com/package/middleware-if-unless)
[![Github stars](https://img.shields.io/github/stars/BackendStack21/middleware-if-unless?style=flat)](https://github.com/BackendStack21/middleware-if-unless)

<img src="docs/logo.svg" width="400">  

Invokes connect-like middleware if / unless routing criteria match. 
> Inspired by the [express-unless](https://www.npmjs.com/package/express-unless) module. But a lot faster ;)

## Main features
- Advanced routes matching capabilities. Uses [find-my-way](https://www.npmjs.com/package/find-my-way) or any compatible router to match the routes. 
- `iff`: execute middleware only if routing criteria is a match. Ideal use case: API gateways (see: [fast-gateway](https://www.npmjs.com/package/fast-gateway))
- `unless`: execute middleware unless routing criteria is a match.
- Arbitraty chaining of `iff -> unless` of vice-versa.
- Low overhead, blazing fast implementation. 

# Usage 
Install
```bash
npm i middleware-if-unless
```

Extending middleware
```js 
const iu = require('middleware-if-unless')()

const middleware = function (req, res, next) {
  res.body = 'hit'

  return next()
}

// extend middleware with iff/unless capabilities
iu(middleware)
```
## unless
Execute middleware unless routing criteria is a match:
```js
const app = require('express')()
app.use(middleware.unless([
  '/not/allowed/to/hit'
]))

...
```
In this example, all requests except `[GET] /not/allowed/to/hit` will cause the middleware to be executed.

## iff
Execute middleware only if routing criteria is a match:
```js
const app = require('express')()
app.use(middleware.iff([
  {
    methods: ['POST', 'DELETE', 'PUT', 'PATCH'],
    url: '/tasks/:id'
  }
]))

...
```
In this example, only a `[POST|DELETE|PUT|PATCH] /tasks/:id` request will cause the middleware to be executed.

# More
- Website and documentation: https://iff-unless.21no.de

---
_Source: https://npm.io/package/middleware-if-unless · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
