# @loopback/express

> Integrate with Express and expose middleware infrastructure for sequence and interceptors

Latest version **8.0.15** (published 2026-08-18) · MIT license · 0 weekly downloads

## Install

```sh
npm install @loopback/express
pnpm add @loopback/express
yarn add @loopback/express
bun add @loopback/express
```

## 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 | 8.0.15 |
| Published | 2026-08-18 |
| First published | 2020-05-07 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | 20 \|\| 22 \|\| 24 |
| Dependencies | 12 |
| Unpacked size | 164.4 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 5106 |
| Author | IBM Corp. and LoopBack contributors |
| Maintainers | rfeng, rmg, dhmlau, theprez, frbuceta, marioestradarosa, achrinza |
| Keywords | loopback-extension, loopback |

## Links

- npm: https://www.npmjs.com/package/@loopback/express
- Repository: https://github.com/loopbackio/loopback-next
- Homepage: https://github.com/loopbackio/loopback-next#readme
- Issues: https://github.com/loopbackio/loopback-next/issues
- npm.io page: https://npm.io/package/@loopback/express

## Dependencies (12)

- [debug](https://npm.io/package/debug.md) ^4.4.3
- [tslib](https://npm.io/package/tslib.md) ^2.8.1
- [express](https://npm.io/package/express.md) ^4.22.2
- [toposort](https://npm.io/package/toposort.md) ^2.0.2
- [body-parser](https://npm.io/package/body-parser.md) ^2.3.0
- [http-errors](https://npm.io/package/http-errors.md) ^2.0.1
- [on-finished](https://npm.io/package/on-finished.md) ^2.4.1
- [@types/express](https://npm.io/package/@types/express.md) ^4.17.25
- [@types/body-parser](https://npm.io/package/@types/body-parser.md) ^1.19.6
- [@types/http-errors](https://npm.io/package/@types/http-errors.md) ^2.0.5
- [@loopback/http-server](https://npm.io/package/@loopback/http-server.md) ^7.0.15
- [@types/express-serve-static-core](https://npm.io/package/@types/express-serve-static-core.md) ^4.19.9

## Recent versions

- 8.0.15 (latest) — 2026-08-18
- 8.0.14 — 2026-07-16
- 8.0.13 — 2026-06-11
- 8.0.12 — 2026-05-12
- 8.0.11 — 2026-04-14
- 8.0.10 — 2026-03-11
- 8.0.9 — 2026-02-10
- 8.0.8 — 2026-01-12
- 8.0.7 — 2025-12-09
- 8.0.6 — 2025-11-11
- 8.0.5 — 2025-10-15
- 8.0.4 — 2025-09-10
- 8.0.3 — 2025-08-11
- 8.0.2 — 2025-07-15
- 8.0.1 — 2025-06-12
- … 65 more at https://npm.io/package/@loopback/express/versions

## README

# @loopback/express

This package adds middleware support for LoopBack 4 and allows Express
middleware to be plugged into LoopBack seamlessly. It's used by `@loopback/rest`
to support Express middleware with `InvokeMiddleware` action within the REST
sequence.

See [documentation](https://loopback.io/doc/en/lb4/Express-middleware.html) for
more details.

## Overview

This module provides the following APIs:

- Helper

- new custom routing engine (special thanks to @bajtos)!
- tools for defining your application routes
- OpenAPI 3.0 spec (`openapi.json`/`openapi.yaml`) generation using
  `@loopback/openapi-v3`
- a default sequence implementation to manage the request and response lifecycle

## Installation

To use this package, you'll need to install `@loopback/express`.

```sh
npm i @loopback/express
```

## Basic Use

1. Adapt an Express middleware

The registration can happen in the constructor of an application.

{% include code-caption.html content="src/application.ts" %}

```ts
import morgan from 'morgan';

export class MyApplication extends RestApplication {
  constructor(options: ApplicationConfig = {}) {
    super(options);

    // Register `morgan` express middleware
    this.expressMiddleware('middleware.morgan', morgan('combined'));
  }
}
```

2. Create your own middleware

The LoopBack middleware is defined as a function with the following signature:

```ts
(context: MiddlewareContext, next: Next) => ValueOrPromise<InvocationResult>;
```

It's very easy to write a simple logging middleware using `async/await`:

```ts
const log: Middleware = async (middlewareCtx, next) => {
  const {request} = middlewareCtx;
  console.log('Request: %s %s', request.method, request.originalUrl);
  try {
    // Proceed with next middleware
    await next();
    // Process response
    console.log(
      'Response received for %s %s',
      request.method,
      request.originalUrl,
    );
  } catch (err) {
    // Catch errors from downstream middleware
    console.error(
      'Error received for %s %s',
      request.method,
      request.originalUrl,
    );
    throw err;
  }
};
```

3. Use Express middleware as interceptors

With the ability to wrap Express middleware as LoopBack 4 interceptors, we can
use the same programming model to register middleware as global interceptors or
local interceptors denoted by `@intercept` decorators at class and method
levels.

The middleware interceptor function can be directly referenced by `@intercept`.

```ts
import morgan from 'morgan';
const morganInterceptor = toInterceptor(morgan('combined'));
class MyController {
  @intercept(morganInterceptor)
  hello(msg: string) {
    return `Hello, ${msg}`;
  }
}
```

It's also possible to bind the middleware to a context as a local or global
interceptor.

```ts
// Register `morgan` express middleware
// Create a middleware factory wrapper for `morgan(format, options)`
const morganFactory = (config?: morgan.Options) => morgan('combined', config);
const binding = registerExpressMiddlewareInterceptor(
  app,
  morganFactory,
  {}, // morgan options
  {
    // As a global interceptor
    global: true,
  },
);
```

For a bound local interceptor with `{global: false}`, the binding key can now be
used with `@intercept`.

```ts
@intercept('interceptors.morgan')
class MyController {
  hello(msg: string) {
    return `Hello, ${msg}`;
  }
}
```

## Contributions

- [Guidelines](https://github.com/loopbackio/loopback-next/blob/master/docs/CONTRIBUTING.md)
- [Join the team](https://github.com/loopbackio/loopback-next/issues/110)

## Tests

Run `npm test` from the root folder.

## Contributors

See
[all contributors](https://github.com/loopbackio/loopback-next/graphs/contributors).

## License

MIT

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