Next.js学习遇TypeError: responseHeaders.getSetCookie is not a function错误求助
问题详情
学习Next.js基础教程时,编写了带try-catch的MongoDB连接逻辑和简单POST接口,Topic创建功能可正常执行,但接口返回500状态码而非预期的201,控制台抛出错误:
⨯ TypeError: responseHeaders.getSetCookie is not a function at new ResponseCookies (webpack-internal:///(rsc)/./node_modules/next/dist/compiled/@edge-runtime/cookies/index.js:213:47) at new NextResponse (webpack-internal:///(rsc)/./node_modules/next/dist/server/web/spec-extension/response.js:40:22) at NextResponse.json (webpack-internal:///(rsc)/./node_modules/next/dist/server/web/spec-extension/response.js:67:16) at GET (webpack-internal:///(rsc)/./app/api/topics/route.js:28:95) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async C:\Users\Micro\Desktop\Study\mongocrud\node_modules\next\dist\compiled\next-server\app-route.runtime.dev.js:6:62499
相关代码
MongoDB连接逻辑:
const connectMongoDB = async () => { try { await mongoose.connect(process.env.MONGODB_URI) console.log('Connected to MongoDB') } catch (error) { console.log(error) } }
POST接口代码:
export async function POST(request){ const {title, description} = await request.json() await connectMongoDB() await Topic.create({title, description}) return NextResponse.json({message: "Topic Created"},{status: 201}) }
修复方案
1. 确认NextResponse的正确导入
确保NextResponse是从next/server路径导入,错误的导入路径会导致Response实例异常:
import { NextResponse } from 'next/server'
2. 为接口添加完整错误捕获
当前POST接口无错误处理逻辑,即使数据创建成功,隐性异常也可能导致Response生成失败,补充try-catch:
export async function POST(request){ try { const {title, description} = await request.json() await connectMongoDB() await Topic.create({title, description}) return NextResponse.json({message: "Topic Created"},{status: 201}) } catch (error) { console.error('创建Topic失败:', error) return NextResponse.json({message: "创建失败", error: error.message}, {status: 500}) } }
3. 检查同文件内的GET接口
错误栈中明确提到at GET (...),说明你的route.js中存在有问题的GET接口,其Response返回逻辑异常会影响整个文件的Response处理。检查并修复GET接口的NextResponse使用方式。
4. 清理缓存并重启开发服务器
Next.js开发服务器的缓存可能导致异常残留,执行以下操作:
- 停止当前开发服务器
- 删除项目根目录下的
.next文件夹 - 重新运行
npm run dev
5. 优化MongoDB连接逻辑
当前连接函数仅捕获错误但不抛出,可能在连接失败时仍执行创建操作,修改为连接失败时抛出错误,让上层逻辑处理:
const connectMongoDB = async () => { try { await mongoose.connect(process.env.MONGODB_URI) console.log('Connected to MongoDB') } catch (error) { console.error('MongoDB连接失败:', error) throw error // 抛出错误触发上层catch逻辑 } }
内容的提问来源于stack exchange,提问作者Nicholas Paiva
相关产品推荐
相关产品推荐

