You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js 14如何通过动态API路由获取动态Token参数?

解决Next.js 14 App Router动态token获取与静态导出错误问题

一、获取动态token参数

在App Router的API路由中,动态路由参数可通过GET函数的第二个参数params直接提取。以你的/api/auth/verify/[token]/route.js文件为例,代码实现如下:

// app/api/auth/verify/[token]/route.js
export async function GET(request, { params }) {
  // 从params中获取动态token
  const { token } = params;
  console.log("当前验证token:", token);
  
  // 这里添加你的用户验证逻辑,比如查询数据库校验token有效性
  const isValidToken = await validateUserToken(token); // 假设这是你的自定义验证函数
  
  if (isValidToken) {
    return new Response(JSON.stringify({ success: true, message: "验证通过" }), {
      status: 200,
      headers: { "Content-Type": "application/json" },
    });
  } else {
    return new Response(JSON.stringify({ success: false, message: "无效token" }), {
      status: 400,
      headers: { "Content-Type": "application/json" },
    });
  }
}

二、解决generateStaticParams()缺失错误

这个错误是因为你在next.config.js中配置了output: 'export'(静态导出模式),该模式要求所有动态路由必须通过generateStaticParams()预生成所有可能的路径。但你的token是用户注册时动态生成的,无法预生成所有token对应的路径,可根据需求选择以下方案:

方案1:移除静态导出配置

如果你的项目不需要静态导出(比如部署到Vercel、Node.js服务器等支持服务端渲染的平台),直接修改next.config.js,删除output: 'export'配置:

// next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
  // 移除 output: 'export' 这一行
  // output: 'export',
};

module.exports = nextConfig;

修改后动态路由可正常运行,无需generateStaticParams()。

方案2:改用查询参数传递token(保留静态导出)

如果必须使用静态导出,建议将token从动态路由参数改为查询参数,避免静态导出需要预生成路径的限制。调整验证链接格式为mywebsite/api/auth/verify?token=xxx,然后在/api/auth/verify/route.js中通过请求URL的查询参数获取token:

// app/api/auth/verify/route.js
export async function GET(request) {
  // 从查询参数中提取token
  const { searchParams } = new URL(request.url);
  const token = searchParams.get('token');
  console.log("当前验证token:", token);
  
  // 后续验证逻辑与之前一致
  const isValidToken = await validateUserToken(token);
  
  if (isValidToken) {
    return new Response(JSON.stringify({ success: true, message: "验证通过" }), {
      status: 200,
      headers: { "Content-Type": "application/json" },
    });
  } else {
    return new Response(JSON.stringify({ success: false, message: "无效token" }), {
      status: 400,
      headers: { "Content-Type": "application/json" },
    });
  }
}

同时,注册时发送的验证链接需改为带查询参数的格式,例如:
${process.env.NEXT_PUBLIC_APP_URL}/api/auth/verify?token=${userToken}

内容的提问来源于stack exchange,提问作者Prayag Bhimani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 18:12:14