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

Next.js学习遇TypeError: responseHeaders.getSetCookie is not a function错误求助

Next.js POST接口创建数据成功但返回500错误(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:25:12