Skip to content

Cette API est principalement destinée aux auteurs de bibliothèques. Pour le moment, seul le routage de style Next.js est pris en charge, mais d'autres styles pourraient être ajoutés à l'avenir.

Style Next.js

La classe FileSystemRouter peut résoudre des routes par rapport à un répertoire pages. (Le répertoire app de Next.js 13 n'est pas encore pris en charge.) Considérez le répertoire pages suivant :

txt
pages
├── index.tsx
├── settings.tsx
├── blog
│   ├── [slug].tsx
│   └── index.tsx
└── [[...catchall]].tsx

Le FileSystemRouter peut être utilisé pour résoudre des routes par rapport à ce répertoire :

ts
const router = new Bun.FileSystemRouter({
  style: "nextjs",
  dir: "./pages",
  origin: "https://mydomain.com",
  assetPrefix: "_next/static/"
});

router.match("/");

// =>
{
  filePath: "/path/to/pages/index.tsx",
  kind: "exact",
  name: "/",
  pathname: "/",
  src: "https://mydomain.com/_next/static/pages/index.tsx"
}

Les paramètres de requête seront analysés et retournés dans la propriété query.

ts
router.match("/settings?foo=bar");

// =>
{
  filePath: "/Users/colinmcd94/Documents/bun/fun/pages/settings.tsx",
  kind: "dynamic",
  name: "/settings",
  pathname: "/settings?foo=bar",
  src: "https://mydomain.com/_next/static/pages/settings.tsx",
  query: {
    foo: "bar"
  }
}

Le routeur analysera automatiquement les paramètres d'URL et les retournera dans la propriété params :

ts
router.match("/blog/my-cool-post");

// =>
{
  filePath: "/Users/colinmcd94/Documents/bun/fun/pages/blog/[slug].tsx",
  kind: "dynamic",
  name: "/blog/[slug]",
  pathname: "/blog/my-cool-post",
  src: "https://mydomain.com/_next/static/pages/blog/[slug].tsx",
  params: {
    slug: "my-cool-post"
  }
}

La méthode .match() accepte également les objets Request et Response. La propriété url sera utilisée pour résoudre la route.

ts
router.match(new Request("https://example.com/blog/my-cool-post"));

Le routeur lira le contenu du répertoire lors de l'initialisation. Pour réanalyser les fichiers, utilisez la méthode .reload().

ts
router.reload();

Référence

ts
interface Bun {
  class FileSystemRouter {
    constructor(params: {
      dir: string;
      style: "nextjs";
      origin?: string;
      assetPrefix?: string;
      fileExtensions?: string[];
    });

    reload(): void;

    match(path: string | Request | Response): {
      filePath: string;
      kind: "exact" | "catch-all" | "optional-catch-all" | "dynamic";
      name: string;
      pathname: string;
      src: string;
      params?: Record<string, string>;
      query?: Record<string, string>;
    } | null
  }
}

Bun édité par www.bunjs.com.cn