You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:22:40