首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬:如何捕获异步回调引起的MongoError

问猫鼬:如何捕获异步回调引起的MongoError
EN

Stack Overflow用户
提问于 2016-02-23 12:08:11
回答 2查看 1.8K关注 0票数 3

当我试图将太大的数据插入mongoDb时,我得到了以下错误:MongoError: document is larger than the maximum size 16777216

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

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

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

代码语言:javascript
复制
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中,但这也没有捕捉到错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-23 15:14:20

因为setTimeout是异步的,并且将回调放在外部,所以调用堆栈提供了错误,因此上升到堆栈的顶部。所以不要使用setTimeout,否则可以添加一个额外的错误处理程序:

代码语言:javascript
复制
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);
票数 1
EN

Stack Overflow用户

发布于 2016-02-23 12:15:15

你需要等待连接的启动。等待“打开”事件:

代码语言:javascript
复制
mongoose.connection.once('open', function() {
  // Your code goes here                    
});

如此处所示:https://gist.github.com/mongolab-org/9959376

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35577212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档