我想捕获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,非常奇怪!有人好建议吗?
3条答案
按热度按时间bwitn5fc1#
我不认为这回答了你的实际问题,但我不相信错误是这样被抓住的。相反,您应该检查
这是Valeri Karpov推荐的解决方案,他是 Mongoose 的核心开发者之一:https://thecodebarbarian.com/mongoose-error-handling(文章来自2016年,但我仍然相信它是有效的)
u7up0aaq2#
在MongoDB文档中,这似乎是处理错误的好方法(请参阅下面的官方文档链接)。
但是在我这边,我甚至没有成功地要求MongoServerError,我得到了“MongoServerError is undefined”。我用“npm i mongodb”安装了MongoDB NodeJS驱动程序,但我也安装了mongoose,并连接到远程Atlas mongodb服务器。你知道我应该如何请求MongoServerError吗?
https://mongodb.github.io/node-mongodb-native/4.3/index.html#error-handling
6jygbczu3#
mongoose正在使用的mongodb驱动程序示例通过mongoose.mongo公开,因此您可以执行
e instanceof mongoose.mongo.MongoError
。明确要求(我认为npm安装)mongodb-core可能会给你一个与mongoose使用的mongodb驱动程序不同的示例(副本)。所以
require('mongodb-core') !== mongoose.mongo
和require('mongodb-core').MongoError !== mongoose.mongo.MongoError
。