Catch-All 路由

我们可以使用 路由字符串路由函数 实现 catch-all 路由

// product.page.route.js

// 匹配以 `/product/*` 开头的 URLs:
// `/product/42`
// `/product/1337/details`
// `/product/2048/some/deeply/nested/path`
//  ...
export default "/product/*";

catch-all 的值在 pageContext.routeParams['*'] 中可用

/product/*/product/@productId 之间的区别在于前者包含嵌套路径,而后者不包含。 例如 /product/42/details 匹配 /product/* 但不匹配 /product/@productId

将所有 URL 路由到一个页面:

// catch-all.page.route.js

export default "/*";
// catch-all.page.js

// `Page` 是唯一的页面
export { Page };

// ...

路由函数支持各种 catch-all 行为

// user.page.route.js

export default async (pageContext) => {
  // Parse the URL
  const urlParts = pageContext.urlPathname.slice(1).split("/");

  // 只以 `/product/*` 开头的URL
  if (urlParts[0] !== "product") {
    return false;
  }

  // Any logic we want really
  // ...
};