0

我正在尝试将文件保存到 node.js 中的 GridFS 中。用例实际上非常简单:“将文件上传到 restify 应用程序,将其保存到 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

4

1 回答 1

0

清理 NPM 依赖

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

有什么帮助:
猫鼬require()的 mongodb,它创建了自己的小实例。如果require()您拥有自己的 mongodb,那么您会以某种方式搞砸一切。不要这样做。

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

如果出于某种原因您需要参考mongodb(例如 for gridfs-stream),猫鼬很乐意与您分享它自己的。

前:

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);
于 2014-04-28T12:26:47.783 回答