gpt4 book ai didi

javascript - Mongoose:如何捕获由异步回调引起的 MongoError

转载 作者:可可西里 更新时间:2023-11-01 09:54:58 25 4
gpt4 key购买 nike

当我试图将太大的数据推送到 mongoDb 时,我收到此错误:MongoError: document is larger than the maximum size 16777216

我知道,这是正常的,但我无法捕捉到这个错误,我的 node.js 进程退出了。

你能告诉我,如何捕获这个错误吗?

example.js:无法捕获错误,node 进程退出

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

mongoose.connection.on('error', function (err) {
console.log(err);
});

var Cat = mongoose.model('Cat', {name: Object});


setTimeout(function () {
var kitty = new Cat({
name: {
value: 'Zildjian',
data: (new Array(16 * 1024 * 1024)).join("x")
}
});

kitty.save(function (err) {
if (err) // ...
console.log('meow');
});

}, 1000);

我试图将我的代码包装到一个 try...catch 中,但它也没有捕获到错误。

最佳答案

因为 setTimeout 是异步的,并且将回调放在调用堆栈之外,以便错误上升到堆栈顶部。所以不要使用 setTimeout,或者您可以添加一个额外的错误处理程序:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

mongoose.connection.on('error', function (err) {
console.log(err);
});

process.on('uncaughtException', function (err) {
if (err.name==='MongoError') {
mongoose.connection.emit('error', err);
} else {
console.log(err);
process.exit(0);
}
});

var Cat = mongoose.model('Cat', {name: Object});


setTimeout(function () {
var kitty = new Cat({
name: {
value: 'Zildjian',
data: (new Array(16 * 1024 * 1024)).join("x")
}
});

kitty.save(function (err) {
if (err) // ...
console.log('meow');
});

}, 1000);

关于javascript - Mongoose:如何捕获由异步回调引起的 MongoError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35577212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com