next-middleware-enhancer
Version:
Enhance Next.js middleware with ease
123 lines (80 loc) • 3.28 kB
Markdown
# Next.js Middleware Enhancer
A lightweight middleware enhancer for Next.js, allowing route-based middleware execution with support for sequential middleware execution.
## 🚀 Features
- **Route Matching**: Supports Next.js `matcher` patterns to apply middleware based on specific routes.
- **Multiple Middleware Execution**: Allows executing multiple middleware functions sequentially.
- **Automatic Response Handling**: Returns `NextResponse.next()` if no matching middleware is found.
## 📦 Installation
Install the package using npm or pnpm:
```sh
npm install next-middleware-enhancer
```
or
```sh
pnpm add next-middleware-enhancer
```
## 🛠 Usage
Define your middleware in `middleware.ts` and use `createMiddleware` to apply route-based handlers.
```ts
import { NextRequest, NextResponse } from "next/server";
import { createMiddleware } from "next-middleware-enhancer";
const authMiddleware = (req: NextRequest) => {
if (!req.headers.get("Authorization")) {
return NextResponse.json({ message: "Unauthorized" }, { status: 401 });
}
};
const { middleware, config } = createMiddleware([{ matcher: "/admin", handler: authMiddleware }]);
export { middleware, config };
```
🛠 Usage (Multiple Handlers)
Apply multiple middleware functions sequentially for a route:
```ts
import { NextRequest, NextResponse } from "next/server";
import { createMiddleware } from "next-middleware-enhancer";
const logMiddleware = (req: NextRequest) => console.log(`Request: ${req.nextUrl.pathname}`);
const authMiddleware = (req: NextRequest) => {
if (!req.headers.get("Authorization")) return NextResponse.json({ message: "Unauthorized" }, { status: 401 });
};
const adminMiddleware = (req: NextRequest) => {
if (req.headers.get("Authorization") !== "admin-secret")
return NextResponse.json({ message: "Forbidden" }, { status: 403 });
};
const { middleware, config } = createMiddleware([
{ matcher: "/admin", handler: [logMiddleware, authMiddleware, adminMiddleware] },
]);
export { middleware, config };
```
Execution Flow:
1️⃣ Logs request path → 2️⃣ Checks auth → 3️⃣ Verifies admin access 🚀
## 📖 API Reference
### `createMiddleware(middlewareList: MiddlewareList)`
Creates a Next.js middleware function that applies the specified middleware handlers based on route patterns.
#### **Parameters**
```ts
type MiddlewareFunction = (req: NextRequest) => NextResponse | void | Promise<NextResponse | void>;
type MiddlewareConfig = { matcher: string; handler: MiddlewareFunction | MiddlewareFunction[] };
type MiddlewareList = MiddlewareConfig[];
```
#### **Returns**
```ts
{
middleware: (req: NextRequest) => NextResponse | void;
config: { matcher: string[] };
}
```
## 🎯 How It Works
1. Requests are matched against `matcher` patterns.
2. Matched middleware functions execute sequentially.
3. A `NextResponse` returned from a middleware stops execution.
4. If no middleware handles the request, `NextResponse.next()` is returned.
## 📝 License
This project is licensed under the MIT License.
## 👥 Contributors
Feel free to contribute to this project by opening issues or pull requests!
### **🌟 Enjoy using Next.js Middleware Enhancer? Give it a star on GitHub!** ⭐