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

在Vercel部署Next.js App Router+Ably时遇40104/40105错误

解决Vercel部署Next.js Ably Token路由的40104/40105错误

修复代码

在你的API路由文件中添加dynamic: "force-dynamic"配置,确保每次请求都生成全新的Token请求:

// src/app/api/getAblyToken/route.ts

import { NextResponse } from "next/server";
import ably from "ably/promises";

export const fetchCache = "force-no-store";
export const dynamic = "force-dynamic"; // 强制路由动态执行

export async function GET() {
  const token = await new ably.Rest({
    queryTime: true,
    key: process.env["ABLY_API_KEY"]!,
  }).auth.createTokenRequest({
    capability: {
      "*": ["subscribe", "publish", "presence"],
    },
  });
  console.log(token);
  return NextResponse.json(token);
}

错误原因解析

  • 40104(Token已被使用):Vercel默认会静态化App Router的API路由,即使设置了fetchCache,仍可能缓存Token请求的响应结果。当多个客户端复用同一个缓存的Token请求时,Ably会判定该Token已被使用,返回40104错误。dynamic: "force-dynamic"强制路由每次请求都重新执行服务器端逻辑,生成全新的Token请求,避免重复使用。

  • 40105(时间戳无效):Vercel边缘运行环境的系统时间可能与Ably服务器存在偏差,queryTime: true会让Ably客户端向服务器获取准确时间来生成Token请求的时间戳。如果路由被静态化缓存,这个时间戳不会更新,很快就会过期,触发40105错误。强制动态路由后,每次请求都会重新获取最新的服务器时间,保证时间戳有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:55:15