ネイティブ ドライバーを使用して、MongoDB の gridfs システムに配置することにより、Express サイトに投稿されたファイルを処理しようとしています。
私が経験している問題は、gridStore オブジェクトの準備が整う前に、リクエストのチャンクがすべて送信されたことです。gridStore の準備ができたら実行されるコールバック内に request.on('data'... ハンドラーを配置しても機能しません。そこでは、コールバックがハンドラーをキャッチするように設定する前に、すべてのチャンクが送信されるようです。これは明らかに不完全な例です (「チャンク」がコンソールに記録されることはありません):
var Db = require('mongodb').Db,
MongoClient = require('mongodb').MongoClient,
Server = require('mongodb').Server,
ObjectID = require('mongodb').ObjectID,
GridStore = require('mongodb').GridStore,
db;
db = new Db('dbName', new Server('serverAddress', 27017), { safe: false });
db.open(function (err, db) {
console.log("db open");
var gridStore = new GridStore(db, new ObjectID(), 'fileName', "w");
gridStore.open(function (err, gridStore) {
console.log("gridStore open");
req.on('data', function (chunk) {
console.log("chunk");
gridStore.write(chunk, function () {});
});
});
})
gridStore の準備が整うまで、Express サイトのルート内からストリームを停止する方法があるかどうか疑問に思っています。あるいは、gridStore を設定する同期的な方法があれば、それが機能することを期待します。