Advanced Route Matching

Advanced v2 patterns: restrict a parameter to a set of values, exclude specific ones, and drop to a regular expression when a pattern needs more.

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();
    },
  ],
});

Czy ta strona była pomocna?

M↓obsługiwane.

Spis treści