Next.js嵌套API路由/api/auth/login/register返回404求助
问题根源与修复方案
核心原因
你的/api/auth/login和/api/auth/register路由返回404,是因为同步数据库操作与Next.js App Router默认的Edge Runtime不兼容:
- Next.js App Router的API路由默认使用Edge Runtime,该环境不支持Node.js专属的同步I/O库(比如你用的better-sqlite3)。
- 当路由代码中调用
verifyUser/createUser这类包含同步SQLite查询的函数时,Runtime加载失败,导致整个路由无法被注册,最终返回404。 - 注释掉这些数据库操作后,路由代码能正常加载,所以GET请求可以正常响应。
修复步骤
1. 强制API路由使用Node.js Runtime
在/api/auth/login/route.ts和/api/auth/register/route.ts的最顶部添加Runtime配置:
export const runtime = 'nodejs'; import {NextResponse} from "next/server"; import {verifyUser} from "@/lib/dbOperations"; // ... 其他原有代码
这会强制让该API路由在Node.js环境下运行,支持better-sqlite3这类同步数据库库。
2. 修正数据库操作中的语法错误(可选但必要)
在dbOperations.ts的createRegistryAccount函数中,存在变量名大小写错误,会导致运行时错误:
// 错误代码 registry_name: RegistryName, // 修正为 registry_name: registryName,
3. 验证修复
重启Next.js开发服务器,重新测试登录和注册的POST请求:
- 提交表单后,路由应正常处理请求,不再返回404。
- 可通过浏览器DevTools的Network面板查看请求状态,确认响应码为200/201或预期的错误码(如401)。
额外建议
- 如果后续需要使用Edge Runtime,建议改用支持Edge环境的数据库(如PlanetScale、Supabase),或者将数据库操作改为异步方式(比如使用sqlite3库的异步API)。
- 开发时可开启Next.js的错误日志,在终端查看详细的加载失败信息,便于快速定位问题:
npm run dev -- --debug
内容的提问来源于stack exchange,提问作者David Essien
相关产品推荐
相关产品推荐

