catch-all路由与 单一动态路由

197 阅读2分钟

pages/api/auth/[...nextauth]pages/api/auth/[id] 在 Next.js 中代表着不同类型的动态路由,它们的用途和行为有显著差异。

pages/api/auth/[...nextauth]

  • "Catch-all" 路由[...nextauth] 是一种特殊的动态路由,被称为 "catch-all" 路由。它可以匹配 /api/auth 后的任意数量的路径段。
  • 用途:这种类型的路由通常用于 NextAuth.js 的集成。由于 NextAuth.js 需要处理多种不同的身份验证相关路径(如 /api/auth/signin, /api/auth/callback, /api/auth/signout 等),因此使用 "catch-all" 路由可以让这些路径都被一个文件处理。
  • 示例:当你访问 /api/auth/signin/api/auth/callback/github 时,这些请求都会被路由到 pages/api/auth/[...nextauth].js 文件。

pages/api/auth/[id]

  • 单一动态路由[id] 是一种标准的动态路由,它匹配 /api/auth 后的单一路径段。
  • 用途:这种类型的路由通常用于处理特定的资源或实体,例如具有特定 id 的用户或项目。
  • 示例:如果你访问 /api/auth/123,这个请求将被路由到 pages/api/auth/[id].js 文件,其中 123 将作为 id 的值。

区别总结

  • 路由匹配[...nextauth] 可以匹配多个路径段,而 [id] 只匹配单个路径段。
  • 使用场景[...nextauth] 适用于需要处理多种子路径的场景(如 NextAuth.js),而 [id] 适用于处理单一实体或资源的场景。

在 Next.js 中正确使用这些不同类型的动态路由可以有效地组织和处理各种路由请求,根据应用的具体需求灵活选择合适的路由模式。

nextjs:因为cache 提供过时数据问题 tips

  1. Time-Based 每3秒忽略cache 下次重新请求数据
export const revalidate = 3;
export async function Page(){
   const snippets = await db.snippets.findMany();
   
   retrun <div>{snippets.map(..)}</div>
   
}

  1. On-Demand 强制清除缓存0
    import { revalidatePath } from "next/cache";
    revalidatePath("/snippets)