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

Node.js应用中Mongoose的findByIdAndRemove等方法无法被识别

问题解决:Mongoose方法无法识别且DELETE请求异常

问题重现

定义的Mongoose Schema:

const mongoose = require('mongoose');

// 分类模型Schema
const categoriaEsquema = mongoose.Schema({
    nombre: {
        type: String,
        required: true
    },
    color: {
        type: String,
    },
    icono: {
        type: String,
    },
    /*imagen: {
        type: String,
        required: true
    },*/ // 暂未使用
})

exports.CategoriaModelo = mongoose.model('Categoria',categoriaEsquema);

用于处理DELETE请求的路由代码:

const {CategoriaModelo} = require('../modelos/categorias');
const express = require('express');
const router = express.Router();

router.delete('/:id', (req, res) => {
    CategoriaModelo.findByIdAndRemove(req.params.id);
});

module.exports = router;

运行时出现错误,所有Mongoose方法均无法被识别,尝试findOneAndRemove等方法也无效。


解决方案

1. 处理异步操作与响应返回

Mongoose的findByIdAndRemove是异步方法,返回Promise,原代码未处理异步逻辑,也未向客户端返回响应,会导致请求挂起并引发错误。使用async/await处理异步流程:

const {CategoriaModelo} = require('../modelos/categorias');
const express = require('express');
const router = express.Router();

router.delete('/:id', async (req, res) => {
    try {
        // Mongoose 6+版本推荐使用findByIdAndDelete替代findByIdAndRemove
        const categoriaEliminada = await CategoriaModelo.findByIdAndDelete(req.params.id);
        
        if (!categoriaEliminada) {
            return res.status(404).json({ mensaje: '分类不存在' });
        }
        
        res.status(200).json({ mensaje: '分类删除成功', datos: categoriaEliminada });
    } catch (error) {
        res.status(500).json({ mensaje: '删除分类失败', error: error.message });
    }
});

module.exports = router;

2. 验证基础配置

  • 确认../modelos/categorias的文件路径正确,CategoriaModelo的导出和导入没有语法错误
  • 检查MongoDB是否已成功连接,未连接状态下Mongoose模型方法无法正常工作

内容的提问来源于stack exchange,提问作者Samuel Becerra Posada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:06:10