猫鼬的错误不是MongoError的实例吗?

时间:2019-05-17 02:07:10

标签: node.js mongodb mongoose

我想捕获E11000 duplicate key错误,所以我故意插入同一用户(uid是键)

const MongoError = require('mongodb-core').MongoError
async function insertUser(uid) {
    try {
        await userModel.create({
            "uid": uid,
            "create_datetime": new Date(),
        })
    } catch (e) {
        console.log(e.constructor)
        console.log(e instanceof MongoError)
    }
} 

使用调试工具,我可以看到e的构造函数是class MongoError extends Error,但是e instanceof MongoError的结果是 false ,非常奇怪!有人好的建议吗?

1 个答案:

答案 0 :(得分:0)

我不认为这可以回答您的实际问题,但是我不认为错误会像这样被捕获。 相反,您应该检查

error.name==='MongoError' && error.code === 11000 

这是Valeri Karpov(猫鼬的核心开发者之一)推荐的解决方案:https://thecodebarbarian.com/mongoose-error-handling (文章摘自2016年,但我仍然相信它是有效的)