Advanced Route Matching
Beyond plain paths: restrict a parameter to a set of values, exclude specific ones, and fall back to regular expressions when a pattern needs it.
NEMO provides powerful route matching capabilities that go beyond simple path matching. This guide covers advanced techniques for fine-tuning your route patterns.
Parameter Constraints
Matching Specific Values
You can constrain route parameters to match only a specific set of values using the (option1|option2) syntax:
const nemo = new NEMO({
"/:lang(en|fr|es)/documentation": [
(req) => {
const { lang } = req.params;
// lang will be either 'en', 'fr', or 'es'
return NextResponse.next();
},
],
});This route will match:
/en/documentation/fr/documentation/es/documentation
But will NOT match:
/de/documentation/jp/documentation
Excluding Specific Values
You can exclude specific values from matching by using the ! operator in the constraint:
const nemo = new NEMO({
"/:section(!api)/details": [
(req) => {
const { section } = req.params;
// section will be anything EXCEPT 'api'
return NextResponse.next();
},
],
});This route will match:
/products/details/users/details/settings/details
But will NOT match:
/api/details
Combining Multiple Constraints
You can use multiple parameter constraints within a single route:
const nemo = new NEMO({
"/:project/:env(dev|staging|prod)/:resource(!secrets)": [
(req) => {
const { project, env, resource } = req.params;
// env will be either 'dev', 'staging', or 'prod'
// resource will be anything EXCEPT 'secrets'
return NextResponse.next();
},
],
});Examples
Language-specific Routes
const nemo = new NEMO({
"/:lang(en|cn)/blog/:postId": [
// Only matches English and Chinese blog pages
(req) => {
const { lang, postId } = req.params;
// lang will be either 'en' or 'cn'
return NextResponse.next();
},
],
});Protected Routes Exclusion
const nemo = new NEMO({
"/:area(!admin|!settings)/:page": [
// This middleware runs for any routes EXCEPT in admin or settings areas
(req) => {
const { area, page } = req.params;
return NextResponse.next();
},
],
});Using Regular Expressions
For even more complex matching requirements, NEMO supports full regular expressions within parameter constraints:
const nemo = new NEMO({
"/:id([0-9]{5})/profile": [
// Only matches if id consists of exactly 5 digits
(req) => {
const { id } = req.params;
return NextResponse.next();
},
],
});Was this helpful?
M↓supported.