我试图将文件保存到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
,这导致了分段错误。
答案 0 :(得分:0)
我已将所有依赖项(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);