NodeJS TypeError:res.getHeader不是NextJS API中的函数

yjghlzjz  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(217)

我正在尝试使用NextJS 13与TypeScript,Next Auth v4,Prisma(使用SQLite数据库进行开发)和OpenAI创建Web应用程序。
每当我访问API端点时,控制台都会显示错误,并显示以下消息:
错误-类型错误: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
}

我一直在互联网上研究,我发现了一些与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()
}

不知道现在该怎么做,有什么建议吗?

py49o6xq

py49o6xq1#

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
  );
}

相关问题