Next.js 13 app目录下API路由请求返回404问题求助
解决Next.js 13 App路由API返回404的问题
你的核心问题是用了Pages路由的API写法来写App路由的接口,两者的规则完全不同,所以导致请求找不到对应的处理逻辑。
正确的App路由API写法规则
在Next.js 13的App Router中,API路由必须遵循以下要求:
- 接口文件必须命名为
route.js(或route.ts) - 文件路径对应API路径:比如
app/api/admin/all/route.js对应GET /api/admin/all - 每个HTTP方法对应导出一个同名的异步函数(如
GET、POST),而不是默认导出一个处理所有方法的函数 - 不再使用
req/res对象,而是使用Next.js提供的NextRequest和NextResponse
针对你的代码修改示例
把原来的文件调整为 app/api/admin/all/route.js,代码替换为:
import { PrismaClient } from '@prisma/client'; import { NextResponse } from 'next/server'; const prisma = new PrismaClient(); export async function GET() { try { const admins = await prisma.admin.findMany(); return NextResponse.json(admins, { status: 200 }); } catch (error) { return NextResponse.json({ error: 'Failed to get admins' }, { status: 500 }); } }
额外排查点
- 确保服务器已经重启:修改路由结构后需要重启Next.js开发服务器才会生效
- 检查文件命名:
route.js不能写成routes.js或其他变体,大小写要匹配(Linux服务器会区分大小写,Windows不区分,但建议统一规范) - 检查是否有自定义中间件(
middleware.js)拦截了API请求,导致请求没到达路由处理逻辑 - 确认App路由模式已启用:项目根目录存在
app文件夹,且next.config.js中没有禁用App Router的配置
内容的提问来源于stack exchange,提问作者Ezequiel González Macho
相关产品推荐
相关产品推荐

