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

Next.js 14.2.12中route.ts导出POST方法报错求助

解决Next.js 14.2.12 route.ts POST导出与Lint规则冲突的问题

问题原因

Next.js App Router的route.ts文件要求通过命名导出(如export async function POST())定义HTTP方法处理函数,不识别export default导出的函数作为POST方法。而你的Lint规则要求单个导出时使用export default,两者产生冲突。

可行解决方案

方案1:针对路由文件调整Lint规则(推荐)

直接在ESLint配置中给app/**/route.ts文件添加例外,允许单个命名导出,无需修改业务代码:

在你的ESLint配置文件(如.eslintrc.json)中添加:

{
  "overrides": [
    {
      "files": ["app/**/route.ts"],
      "rules": {
        "import/prefer-default-export": "off"
      }
    }
  ]
}

注:如果你的Lint规则不是import/prefer-default-export,替换成对应规则名即可。

之后按Next.js规范编写route.ts:

// app/xxx/route.ts
export async function POST(request: Request) {
  // 你的POST请求处理逻辑
  return new Response('POST请求处理完成', { status: 200 });
}

方案2:通过默认导出适配Next.js路由类型(不推荐,仅当无法修改Lint规则时使用)

将POST函数包裹成对象后默认导出,同时用类型断言让Next.js识别:

// app/xxx/route.ts
async function POST(request: Request) {
  // 你的POST请求处理逻辑
  return new Response('POST请求处理完成', { status: 200 });
}

// 适配Next.js路由类型,同时满足Lint的default导出要求
export default { POST } as const;

注意:此方法可能触发TypeScript类型警告,可通过// @ts-ignore忽略,或手动扩展Next.js路由类型定义。

为什么网上的方案不符合需求

你提到的export {handler as POST, handler as GET}方案是为了同时处理GET和POST请求,但你仅需处理POST,完全不需要导出GET方法,因此该方案冗余且不符合你的需求。

内容的提问来源于stack exchange,提问作者Rafael Wesley de Lima

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:17:08