Next.js中GET与NextAuth参数类型不匹配问题及修正
解决Next.js App Router中NextAuth参数类型不匹配问题
问题根源
你用的是Next.js App Router(路径为app/api/.../route.ts),这个路由体系下的API函数参数要求是Request或NextRequest类型,但你代码里用了Pages Router专属的NextApiRequest/NextApiResponse,导致类型不兼容。
修正步骤及代码
- 替换类型导入:从
next/server导入App Router对应的NextRequest和NextResponse,删除原来的NextApiRequest/NextApiResponse导入。 - 调整handler函数的参数类型,匹配App Router的要求。
- 保持NextAuth的配置逻辑不变,直接传入新的参数类型即可。
修正后的代码:
import { Server, Socket } from 'socket.io' import { txsDisplay } from '../worker-callback/route'; import NextAuth from 'next-auth'; import GoogleProvider from "next-auth/providers/google" import config from "@/../config.json"; // 替换为App Router的类型 import { NextRequest, NextResponse } from 'next/server'; async function handler(req: NextRequest, res: NextResponse) { // 前置逻辑保持不变 return await NextAuth(req, res, { providers: [ GoogleProvider({ clientId: config.GOOGLE_ID!, clientSecret: config.GOOGLE_SECRET!, }), // 可添加其他登录提供商 ], callbacks: { session({ session, user }) { // 自定义session逻辑 return session; } } }) } export { handler as GET };
额外提示
代码里的// FIXME: duplicate code提示可以把NextAuth的配置抽成单独文件(比如app/auth.ts),这样其他需要用到的地方可以直接导入复用,避免重复代码。
内容的提问来源于stack exchange,提问作者porton
相关产品推荐
相关产品推荐

