MEAN应用程序中未定义已删除的对象

时间:2018-03-06 17:06:53

标签: node.js mongodb express postman

我正在尝试构建一个MEAN堆栈SPA,到目前为止,我已经使用本教程创建了后端服务:https://medium.com/netscape/mean-app-tutorial-with-angular-4-part-1-18691663ea96

当我使用Postman(POST,PUT,GET)进行测试时,一切正常,但是,当我尝试删除对象时,会导致错误:

{
 "status": 400,
 "message": "TypeError: Cannot read property 'n' of undefined"
}

以下是我的删除方法在todos.service.js中的显示方式:

exports.deleteTodo = async function(id){

    try{
        var deleted = await ToDo.remove({_id: id})
        if(deleted.result.n === 0){
            throw Error("Todo Could not be deleted")
        }
        return deleted
    }catch(e){
        throw Error(e)
    }
}

这是我的todos.controller.js:

exports.removeTodo = async function(req, res, next){

    var id = req.params.id;

    try{
        var deleted = await TodoService.deleteTodo(id)
        return res.status(204).json({status:204, message: "Succesfully Todo Deleted"})
    }catch(e){
        return res.status(400).json({status: 400, message: e.message})
    }

}

当我尝试删除一个对象时,它成功删除了它(我可以使用robomongo看到它删除了它),但是,我收到了之前写过的错误消息。这可能是什么问题?

1 个答案:

答案 0 :(得分:1)

您必须使用Mongoose v5。模型的remove方法不需要任何参数,并返回已删除的文档。

在v4 remove中直接调用了集合remove方法,确实需要条件删除并返回已删除文档的数量。

package.json中的mongoose版本限制为^4.0.0或使用更现代的教程。