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

Next.js项目reCAPTCHA后端API报错:无HTTP方法导出及405错误

问题解决:Next.js App Router API路由405错误及reCAPTCHA验证修正

错误原因

你遇到的两个错误完全关联:Next.js App Router的app目录API路由要求必须导出与HTTP方法同名的命名函数(比如POST、GET),而你导出的是自定义名称postHandler,导致Next.js无法识别该路由支持POST方法,因此返回405错误,同时终端提示"No HTTP methods exported"。

另外,你在route.ts中错误引入了express、cors、body-parser——App Router内置了这些功能,不需要额外配置。

修正后的代码

import axios from 'axios';

// App Router要求导出与HTTP方法同名的函数,必须大写
export async function POST(req: Request) {
  try {
    // App Router中通过req.json()获取请求体
    const { token } = await req.json();
    
    // 修正reCAPTCHA验证URL:缺少?分隔路径和参数
    const response = await axios.post(
      `https://www.google.com/recaptcha/api/siteverify?secret=${process.env.RECAPTCHA_SECRET_KEY}&response=${token}`
    );

    if (response.data.success) {
      return Response.json({ message: 'reCAPTCHA验证成功' }, { status: 200 });
    } else {
      return Response.json({ message: 'reCAPTCHA验证失败' }, { status: 400 });
    }
  } catch (err) {
    console.error(err);
    return Response.json({ message: '服务器内部错误' }, { status: 500 });
  }
}

关键注意事项

  • 环境变量:RECAPTCHA_SECRET_KEY不要加NEXT_PUBLIC_前缀,这个密钥是后端专用的,不能暴露给前端,Next.js中带NEXT_PUBLIC_的变量会被编译到前端代码里。
  • Request类型:App Router的API路由使用Web标准的Request和Response对象,而不是pages路由的NextApiRequest/NextApiResponse。
  • URL格式:你之前的reCAPTCHA验证URL缺少?,导致参数无法正确解析,这会直接导致验证失败,必须修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:07:01