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

Mongoose报错:Model.findOneAndUpdate()不再支持回调函数

解决MongooseError: Model.findOneAndUpdate() no longer accepts a callback错误

报错信息(中文翻译)

MongooseError: Model.findOneAndUpdate() 不再接受回调函数
在 Function.Model.findOneAndUpdate (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\mongoose\lib\model.js:2398:11)
在 getOne (file:///C:/Users/Kous/Desktop/First-Full-Stack/controllers/PostController.js:40:13)
在 Layer.handle [as handle_request] (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\layer.js:95:5)
在 next (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\route.js:144:13)
在 Route.dispatch (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\route.js:114:3)
在 Layer.handle [as handle_request] (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\layer.js:95:5)
在 C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\index.js:284:15)
在 param (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\index.js:365:14)
在 param (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\index.js:376:14)
在 Function.process_params (C:\Users\Kous\Desktop\First-Full-Stack\node_modules\express\lib\router\index.js:421:3)

问题原因

你使用的Mongoose版本已移除了对findOneAndUpdate回调参数的支持,该方法现在仅返回Promise,必须用Promise链或async/await语法处理结果。

修改后的代码

export const getOne = async (req, res) => {
    try {
        const postId = req.params.id

        const doc = await PostModel.findOneAndUpdate(
            { _id: postId },
            { $inc: { viewsCount: 1 } },
            { returnDocument: 'after' }
        )

        if (!doc) {
            return res.status(404).json({
                message: "post not found"
            })
        }

        res.json(doc)
    } catch (error) {
        console.log(error)
        res.status(500).json({ message: "cant return post" })
    }
}

关键修改点

  • 为getOne函数添加async关键字,允许内部使用await
  • 移除findOneAndUpdate的回调参数,改用await直接接收更新后的文档
  • 原回调中的错误逻辑合并到外层try/catch,Promise的reject会自动被catch捕获
  • 修正了原代码中cant retunr post的拼写错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 06:33:21