类型错误:res.getHeader 不是 NextJS API 中的函数

Mar*_*mal 2 javascript node.js next.js prisma next-auth

我正在尝试使用 NextJS 13 和 TypeScript、Next Auth v4、Prisma(带有用于开发的 SQLite 数据库)和 OpenAI 创建一个 Web 应用程序。

每当我访问 API 端点时,控制台都会显示错误并显示以下消息:

错误 - TypeError:res.getHeader 不是函数

在 setCookie (webpack-internal:///(sc_server)/./node_modules/next-auth/next/utils.js:11:49)

我发现每当代码尝试getServerSession()在这一行分配会话变量时都会失败:

export async function GET(
    req: NextApiRequest, 
    res: NextApiResponse
) {
    const session = await getServerSession(req, res, authOptions) // <-- here it fails
    const sessionErrors = checkSessionErrors(session, req.url);
    if (sessionErrors) return sessionErrors;

    // rest of the code
}
Run Code Online (Sandbox Code Playgroud)

我一直在互联网上进行研究,发现了一些与 Webpack 中间件相关的问题。但我没有使用任何中间件。

我也尝试过将代码替换为如下所示:

export async function GET(req: NextRequest) {
    const session = await getServerSession() // not sure how to fill this now
    const sessionErrors = checkSessionErrors(session, req.url);
    if (sessionErrors) return sessionErrors;

    // rest of the code
    // return stuff with NextResponse.json()
}
Run Code Online (Sandbox Code Playgroud)

现在不知道如何继续,对此有何建议?

小智 8

getServerSession期望NextApiRequestNextApiResponse争论。我通过添加getHeadersetHeader函数解决了这个问题NextResponse

export async function POST(req: NextRequest, res: NextResponse) {
  const session = await getServerSession(
    req as unknown as NextApiRequest,
    {
      ...res,
      getHeader: (name: string) => res.headers?.get(name),
      setHeader: (name: string, value: string) => res.headers?.set(name, value),
    } as unknown as NextApiResponse,
    authOptions
  );
}


Run Code Online (Sandbox Code Playgroud)


小智 8

使用应用程序路由器时,您不需要传递 req & res。它仅适用于 authOptions。