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

Next.js项目部署至Vercel时出现PUT路由类型错误求助

Next.js项目部署至Vercel时出现PUT路由类型错误求助

兄弟,你这问题我之前帮朋友排查过类似的!先把你的问题理清楚:

部署到Vercel时弹出的错误:
src/app/api/orders/[id]/route.ts Type error: Route "src/app/api/orders/[id]/route.ts" has an invalid "PUT" export: Type { params: { id: string; }; } is not a valid type for the function's second argument.

你的代码开头是这样的(虽然没贴全,但我大概能get到场景):

import { getAuthSession } from "@/auth";
import { prisma } from "@/utils/connect";
// 后续是PUT处理函数的逻辑

问题核心出在Next.js App Router对API路由处理函数的类型要求上!我给你几个接地气的排查和修复方向:

  • 先核对PUT函数的参数结构:在Next.js 13+的App Router里,PUT处理函数的第一个参数必须是NextRequest类型的请求对象,第二个才是包含params的上下文。你是不是把参数顺序搞反了?或者没给第一个参数指定正确类型?正确的写法参考下:

    import { NextRequest, NextResponse } from 'next/server';
    
    export async function PUT(request: NextRequest, { params }: { params: { id: string } }) {
      // 你的业务逻辑:比如校验登录态、操作数据库
      const session = await getAuthSession();
      if (!session) {
        return NextResponse.json({ message: "未授权操作" }, { status: 401 });
      }
    
      const updatedOrder = await prisma.order.update({
        where: { id: params.id },
        data: { /* 这里填你要更新的字段 */ }
      });
    
      return NextResponse.json(updatedOrder);
    }
    
  • 别漏了导入Next.js核心类型:一定要从next/server导入NextRequest和NextResponse,不然TypeScript识别不了参数的正确类型,就会报这种摸不着头脑的错误。

  • 本地先做预构建测试:别等部署到Vercel才踩坑,本地先跑npm run build,如果同样报错,那就是代码或TS配置的问题,本地修复可比部署后排查高效多了。

  • 检查TS配置文件:看看你的tsconfig.json里的compilerOptions是不是符合Next.js要求,比如target设为ESNext、module设为ESNext、moduleResolution设为Bundler,这些配置不对也会触发类型校验失败。

  • 路径别名要配置正确:你用了@/auth和@/utils/connect这种别名,得确保tsconfig.json里的paths配置没问题,比如:

    "compilerOptions": {
      "paths": {
        "@/*": ["./src/*"]
      }
    }
    

    不然TypeScript找不到这些模块,也可能间接引发类型错误。

按照上面的步骤一步步捋,应该能搞定这个类型问题,顺利部署到Vercel啦!

备注:内容来源于stack exchange,提问作者David Onyekachi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 16:59:34