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

/api/addproducts接口未返回响应致请求停滞,求排查解决

排查Next.js添加产品API的响应未发送问题

核心问题分析与修复步骤

1. API路由未处理非POST请求

当前代码仅处理POST方法,当请求为GET、PUT等其他类型时,未返回任何响应,这直接触发了"API resolved without sending a response"错误。

修复方式:
在API函数末尾添加非POST请求的响应逻辑:

export default async function handler (req, res){
    const {method}=req
    // ... 原有代码
    // 处理非POST请求
    else {
        res.setHeader('Allow', ['POST']);
        res.status(405).json({ message: `Method ${method} Not Allowed` });
    }
}

2. 数据库连接未等待完成

dbConnect()是异步函数,但调用时未加await,导致数据库连接尚未建立就执行产品保存操作,可能引发数据库操作失败且无法正确捕获错误。

修复方式:
调用dbConnect()时添加await:

await dbConnect()

3. 未声明变量savedProduct

代码中savedProduct=await product.save()未用let或const声明,会隐式创建全局变量,可能引发意外问题。

修复方式:
添加变量声明:

const savedProduct = await product.save()

4. 数据库连接代码中的拼写错误

数据库连接代码里let cashed=global.momgoose存在拼写错误,momgoose应为mongoose,这会导致缓存机制失效,每次请求都重新创建数据库连接,可能引发连接异常。

修复方式:
修正拼写错误:

let cashed = global.mongoose

完整修复后的API代码

import Product from "../../models/Products"
import dbConnect from "../../middlewear/db"

export default async function handler (req, res){
    const {method}=req
    try {
        await dbConnect() // 等待数据库连接完成
        if(method==='POST'){
            const product = new Product(req.body)
            const savedProduct = await product.save()
            return res.status(200).json({ message: "success" });
        } else {
            res.setHeader('Allow', ['POST']);
            res.status(405).json({ message: `Method ${method} Not Allowed` });
        }
    } catch (error) {
        res.status(500).json({status:"Internal server error", message:error.message})
    }
}

完整修复后的数据库连接代码

import mongoose from "mongoose"

const MONGNODB_URL=process.env.MONGNODB_URL

if(!MONGNODB_URL){
    throw new Error("Please define mongo URI inside .env.local")
}
let cashed=global.mongoose // 修正拼写错误

if(!cashed){
    cashed=global.mongoose={conn:null,promise:null}
}

async function connectDB(){
    if(cashed.conn){
        return cashed.conn
    }
    
    if(!cashed.promise){
        const opts={
            bufferCommands:false
        }
        
        cashed.promise= await mongoose.connect(MONGNODB_URL,opts).then((mongoose)=>{
            return mongoose
        })
    }
    cashed.conn=await cashed.promise
    return cashed.conn
}

export default connectDB

内容的提问来源于stack exchange,提问作者user18259724

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:40:35