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

Next.js App Router调用/api接口返回500错误:this需为EventTarget类型

问题排查:Next.js App Router API端点返回500错误

使用最新版Next.js + App Router调用/api端点时返回500错误,错误信息:

Error [ERR_INTERNAL_ASSERTION]: TypeError [ERR_INVALID_THIS]: Value of "this" must be of type EventTarget


问题根源

API路由文件错误混用了Pages Router的类型定义:NextApiRequest/NextApiResponse是旧版Pages Router的API类型,App Router的app/api/route.ts采用标准Web API的Request对象,强行导入旧类型会触发内部断言错误。


解决方案

1. 修正API路由文件(app/api/route.ts)

移除旧类型导入,改用App Router原生的Request对象:

import { NextResponse } from "next/server";

export const POST = async (req: Request) => {
  // 解析请求体(如果需要)
  const body = await req.json();
  console.log("收到的授权码:", body.code);

  return NextResponse.json({ data: "accessToken" });
};

2. 客户端代码优化(规范写法)

  • 改用相对路径调用API,避免硬编码域名
  • 添加错误捕获逻辑,处理请求失败场景
  • 客户端环境变量需以NEXT_PUBLIC_开头才能被浏览器访问
"use client";

import { useSearchParams } from "next/navigation";

export default function Home() {
  const authorizeTwitchApp = `${process.env.NEXT_PUBLIC_TWITCH_API_URL}/oauth2/authorize?response_type=code&client_id=${process.env.NEXT_PUBLIC_TWITCH_CLIENT_ID}&redirect_uri=http://localhost:3000&scope=channel%3Amanage%3Apolls+channel%3Aread%3Apolls+openid`;

  const queryParam = useSearchParams().get("code");

  const getAccessToken = async (e: React.MouseEvent<HTMLButtonElement>) => {
    e.preventDefault();
    if (!queryParam) return;

    try {
      const response = await fetch("/api", {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ code: queryParam }),
      });

      if (!response.ok) throw new Error("API请求失败");
      const data = await response.json();
      console.log(data);
    } catch (err) {
      console.error("请求出错:", err);
    }
  };

  return (
    <div>
      <a href={authorizeTwitchApp}>点击授权Twitch</a>
      <button onClick={getAccessToken}>发送授权码到API</button>
    </div>
  );
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 06:10:11