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

Node.js+Express支出追踪API:Postman DELETE请求500错误求助

解决Node.js + Express支出追踪器DELETE请求500错误

问题定位

从代码和请求表现来看,GET/POST请求正常但DELETE返回500,核心原因大概率是Mongoose版本兼容性问题:你代码中使用的transaction.remove()方法在Mongoose 6.x及以上版本已被弃用,调用该方法会触发内部服务器错误,导致返回500状态码。

建议先在DELETE控制器的catch块中打印错误详情,确认具体报错信息:

catch (err) {
    console.log(err); // 打印错误到控制台,查看具体触发原因
    return res.status(500).json({
        success: false,
        error: 'Server Error'
    });
}

修复方案

方案1:使用findByIdAndDelete直接删除(推荐)

替换原有DELETE控制器逻辑,直接通过ID完成删除操作,无需先查询再删除,代码更简洁高效:

exports.deleteTransaction = async (req, res, next) => {
    try {
        const transaction = await Transaction.findByIdAndDelete(req.params.id);

        if(!transaction) {
            return res.status(404).json({
                success: false,
                error: 'No transaction found'
            });
        }

        return res.status(200).json({
            success: true,
            data: {}
        });

    } catch (err) {
        console.log(err);
        return res.status(500).json({
            success: false,
            error: 'Server Error'
        });
    }
}

方案2:替换弃用方法为deleteOne()

如果要保留先查询再删除的逻辑,将弃用的remove()替换为当前支持的deleteOne():

// 替换原有代码行
await transaction.remove();
// 改为
await transaction.deleteOne();

额外检查点

  • 确认请求URL中的_id与数据库存储的ID完全一致,避免复制时出现空格、字符缺失等格式错误
  • 检查路由配置是否正确,确保DELETE路由路径/api/v1/transactions/:id与控制器绑定无误(注意你代码注释中的路由写为/api/vi/transactions/:id,此处vi是笔误,只要实际路由配置为v1即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:30:06