猫鼬:如何捕获由异步回调引起的MongoError
Mongoose: how to catch MongoError caused by async callback
当我尝试将太大的数据推送到mongoDb
时,出现此错误:MongoError: document is larger than the maximum size 16777216
我知道,这是正常的,但是我无法捕获此错误,并且我的node.js
进程退出。
你能告诉我,如何捕获此错误吗?
示例.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);
您需要等待连接启动。等待"打开"事件:
mongoose.connection.once('open', function() {
// Your code goes here
});
如下所述:https://gist.github.com/mongolab-org/9959376
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 将json回调数据转换为日期
- 承诺在非节点式回调上使用Bluebird
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- Soundcloud Javascript SDK 3.0-回调无法读取属性'connectCallback
- 如何使用jqueryAJAX从页面中回调多个变量
- jquery Onclick函数带有导致双击的回调排序函数
- Javascript点击事件回调不起作用
- 一旦加载并渲染了角度引导typeahead,就使用回调
- 成功回调永远不会被JSONP请求调用
- 如何让程序员在javascript中实现正确的回调
- 猫鼬:如何捕获由异步回调引起的MongoError