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
相关产品推荐
相关产品推荐

