Next.js 13实验性app目录下Mongoose连接不稳定问题
Next.js 13 实验性app目录下Mongoose连接缓冲超时问题解决
原问题
将Vercel提供的dbConnect文件复制到TypeScript版Next.js 13应用中,采用新实验性"app"目录结构(该版本支持独立POST、GET等API函数),调用login_admin API端点时出现异常:
- 服务器启动后首次调用可能成功几次,但修改文件或等待一段时间后无法再正常调用
- 控制台打印dbConnect返回的连接readyState为1,但随后
findOne方法触发缓冲超时错误
API路由代码:
import { NextResponse } from 'next/server' import Admin from '@/models/Admin' import dbConnect from '@/lib/dbConnect' import mongoose from 'mongoose' export async function POST(request: Request) { const conn = await dbConnect() console.log(conn.connection.readyState) const data = await request.json() const { username, password } = data const admin = await Admin.findOne({ username: username }) if (admin) { if (await admin.verifyPW(password)) { return NextResponse.json(admin) } else { return NextResponse.json({ error: 'Password incorrect' }) } } else { return NextResponse.json({ error: 'No admin found with that username'}) } }
报错信息:
error - MongooseError: Operation `admins.findOne()` buffering timed out after 10000ms at Timeout.eval (webpack-internal:///(sc_server)/./node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:145:33) at listOnTimeout (node:internal/timers:569:17) at process.processTimers (node:internal/timers:512:7)
疑问:该Vercel提供的示例是否适配Next.js 13?Ubuntu运行环境是否会影响问题出现?
解决方法
创建新的Next.js应用时不启用实验性"app"目录结构,切换回传统的API路由模式(使用单一handler函数,可通过switch/if语句处理不同请求方法),该配置下数据库连接稳定可用。推测当前Next.js 13的实验性app目录暂未完全兼容数据库连接场景。
内容的提问来源于stack exchange,提问作者Samuel Samuelson
相关产品推荐
相关产品推荐

