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

Next.js v15部署至Vercel后动态路由失效问题求助

问题描述

使用Next.js v15开发Telegram迷你应用,包含依赖用户名的动态路由/wallet/[username]/sell,支持随时新增用户。开发环境下所有功能正常,但部署至Vercel后出现异常:

  • Vercel运行时日志显示GET请求返回200状态码,但页面实际显示的是根目录内容
  • 清除cookies后,该动态路由可正常显示username值
  • 怀疑问题与cookies的使用有关,附上相关页面代码:
interface PageProps {
  params: Promise<{ username: string }>
}

async function SellPage({ params }: PageProps) {
  const { username } = await params
  const cookiesStore = await cookies()
  const sellStep: string = (cookiesStore).get('sellStep')?.value ?? '1'

  return (
    <section className={style.main}>
      <h1>Sell: {sellStep}</h1>
      <h3>{username}</h3>
    </section>
  )
}
排查与解决方案

1. 强制动态渲染,避免路由缓存

Next.js v15默认会对符合静态条件的页面进行缓存,而你的页面依赖动态参数username和cookiessellStep,需要明确禁用静态缓存:
在页面组件顶部添加export const dynamic = 'force-dynamic',强制页面每次请求都重新渲染,防止Vercel缓存旧的路由内容:

export const dynamic = 'force-dynamic'

interface PageProps {
  params: Promise<{ username: string }>
}

async function SellPage({ params }: PageProps) {
  // 原有代码保持不变
}

2. 排查cookies读取异常

虽然代码逻辑看似正常,但可以添加日志确认cookies值是否异常:
在读取cookies后加入日志输出,通过Vercel运行时日志查看具体值,排查是否存在sellStep cookie异常导致的渲染问题:

const cookiesStore = await cookies()
const sellStep: string = cookiesStore.get('sellStep')?.value ?? '1'
console.log('当前sellStep值:', sellStep, '当前用户名:', username)

3. 检查Telegram路由跳转逻辑

Telegram迷你应用的路由跳转可能存在特殊处理,需确认:

  • 跳转至/wallet/[username]/sell时,是否正确传递了username参数,未被cookies状态干扰
  • 尝试在跳转时添加强制刷新,避免客户端缓存旧页面

4. 核对Vercel部署配置

  • 检查项目的next.config.js是否存在路由重写、缓存规则等配置,导致动态路由被错误映射到根目录
  • 确认Vercel构建日志无报错,动态路由已正确生成

内容的提问来源于stack exchange,提问作者Javi Rodriguez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:38:12