超出最大调用堆栈大小 - 保存到GridFS - 不发生递归

时间:2014-04-23 07:37:45

标签: node.js mongodb mongoose gridfs gridfs-stream

我试图将文件保存到node.js中的GridFS中。 用例实际上非常简单:"将文件上传到restify app,将其保存到GridFS"。

function put(req, res, next) {
    var ws, filename;

    var application = new Application(req.params);
    if (req.files.cv) {
        filename = application._id + '/' + req.files.cv.name;
        ws = gfs.createWriteStream({
            filename: filename,
            content_type: req.files.cv.type
        });

        ws.on('error', function (error) {
            console.log('could not save: ', error);
        });

        fs.createReadStream(req.files.cv.path).pipe(ws);
        application.files.push(filename);
    }
    /* cut */
    application.save(function (err, application) {
        /* cut */
        next();
    });
}

控制台告诉我

could not save:  [RangeError: Maximum call stack size exceeded]

因为这是从一个事件中解雇的,所以我没有堆栈跟踪。无论如何都没有写入GridFS。

由于我没有递归,我认为它必须在gridfs-stream或mongodb的一面,并且由于这些已经过测试,我试图简单地提高--stack-size,这导致了分段错误。

这是我的环境:https://github.com/semmypurewal/node-dev-bootstrap

1 个答案:

答案 0 :(得分:0)

清理NPM依赖项

我已将所有依赖项(mongodb,mongoose,gridfs-stream)更新为最新版本:没有帮助。

有什么帮助:
mongoose require()的mongodb,它创造了它自己的小实例。如果你require()你自己的mongodb,你不知何故f * ck一切。不要这样做。

  • 只有require()猫鼬。
  • mongodb
  • 中删除package.json
  • mongodb移除node_modules

如果由于某种原因你需要引用mongodb(例如gridfs-stream),那么mongoose足以与你分享它自己。

<强>之前:

var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
var mongo = require('mongodb'); // BAD BOY! BAD! 
//...
var gfs = Grid(mongoose.connection.db, mongo);

之后:

var mongoose = require('mongoose');
var Grid = require('gridfs-stream');
var mongo = mongoose.mongo; // I LIKE, SO NICE!
//...
var gfs = Grid(mongoose.connection.db, mongo);