I持っているコード次保存MongoDBの使用gridfs内のファイルと
gridfs.jsをマングースはマングーススキーマは以下に定義されて
exports.putFile = function(path, name, options, fn) {
var db;
db = mongoose.connection.db;
options = parse(options);
options.metadata.filename = name;
return new GridStore(db, name, "w", options).open(function(err, file) {
if (err) {
return fn(err);
}
return file.writeFile(path, fn);
});
};
ファイルのバイトに書き込み、次のコードを持っています。 mongooseスキーマにはファイル名とファイル自体があります。
var fs = require('fs');
var mongoose = require('mongoose');
var db = mongoose.connection;
var gridfs = require('./gridfs');
var Schema = mongoose.Schema;
var trackDocsSchema = mongoose.Schema(
{
_id : Schema.Types.ObjectId,
docName: 'string',
files: [ mongoose.Schema.Mixed ]
}
);
trackDocsSchema.methods.addFile = function(file, options, fn) {
var trackDocs;
trackDocs = this;
return gridfs.putFile(file.path, file.name, options, function(err, result) {
if (err) console.log("postDocsModel TrackDocs Error: " + err);
trackDocs.files.push(result);
return trackDocs.save(fn);
});
};
var TrackDocs = mongoose.model("TrackDocs", trackDocsSchema);
呼び出されるサーバーコードは以下のとおりです。例外RangeError:最大コールスタック超過サイズと何がGridFSに追加され、私はfolowingコードを実行すると
exports.uploadFile = function (req, res) {
console.log("uploadFile invoked");
var trackDocs, opts;
trackDocs = new TrackDocs();
trackDocs._id = mongoose.Types.ObjectId(req.body._id);
trackDocs.docName = req.body.docName;
opts = {
content_type: req.files.file.type
};
return trackDocs.addFile(req.files.file, opts, function (err, result) {
if (err) console.log("api TrackDocs Error: " + err);
console.log("Result: " + result);
trackDocs.save();
console.log("Inserted Doc Id: " + trackDocs._id);
return res.json(true);
});
};
});
は、私はエラーに
のAPI TrackDocsエラーを取得します。ただし、同じファイルを再度アップロードすると、GridFSに保存されます。
注意2つのtrackDocs.savesがあります。それが問題を引き起こしているのかどうかはわかりません。
私はNodeJSとMongooseを初めて使用しているので、どのようなアサーションも高く評価されます。
おかげで、 Melroy
これでどこにいましたか? – iandotkelly
どのラインがその例外を投げていますか? 1つの潜在的な回避策(実際の解決策ではない)は、スタックサイズを増やすことです。 'node --stack-size = 32000 app.js ' –
あなたのファイルアップロードをどうやって扱いますか?恐ろしいか何か他のライブラリと? – lukaszfiszer