🧵 Next Compose Middleware
next-compose-middleware
is a library that simplifies building complex, declarative middleware for Next.js applications. It allows you to create highly readable and maintainable middleware by composing multiple functions together.
🌟 Features
- Path-based middleware execution (like "Nested Middleware")
- Composition of functions divided by interest (including early exit)
🔏 Requirements
Next.js v12.2.0+ (Middleware support)
🚀 Installation
npm install next-compose-middleware
yarn add next-compose-middleware
pnpm add next-compose-middleware
🐈 Usage
Basic
export default async function middleware(req: NextRequest) {
return composeMiddleware(req, NextResponse.next(), {
scripts: [root1, root2],
'/foo': {
scripts: [foo],
'/bar': {
scripts: [fooBar],
},
'/[id]': {
scripts: [fooId],
'/baz': [fooIdBaz]
},
'/qux': [fooQux]
'/qux': {
scripts: [fooQux]
}
}
})
}
Each middleware function is a ComposableMiddleware
function.
It is almost identical to the Next.js middleware, except for additional arguments.
const fooMiddleware: ComposableMiddleware = async (req, res) => {
res.cookies.set('foo', 'foo')
return res;
};
Early Exit
To abort the process at a specific middleware without executing subsequent functions, use the breakAll or breakOnce handler from the third argument.
const basicAuth: ComposableMiddleware = async (req, res, { breakAll, breakOnce }) => {
const success = validateBasicAuth(req);
if (success) {
return res;
} else {
return breakAll(res);
return breakOnce(res);
}
};
export default async function middleware(req: NextRequest) {
return composeMiddleware(req, NextResponse.next(), {
scripts: [basicAuth, refreshToken],
'/foo': {
scripts: [foo],
...
}
})
}