0

我正在尝试通过使用本机驱动程序将其放入 MongoDB 的 gridfs 系统来处理发布到 Express 站点的文件。

我遇到的问题是请求的块在 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 () {});
        });
    });
})

我想知道是否有办法从 Express 站点的路线中阻止流来,直到 gridStore 准备好。或者,我希望有一种同步方式来设置 gridStore 以使其工作(如果存在)。

4

2 回答 2

0

我通过将传入的帖子写入临时文件来解决我的问题。它确实让事情变慢了一点,但缓存实际上发生得很快,尤其是与写入 GridFS 相比。

于 2013-04-11T01:33:54.310 回答
0

当接收到新的数据块时,您可以使用 req.pause() 。当从 gridStore.write() 回调时 req.resume()。并根据请求“结束”事件,关闭 gridStore。

于 2013-05-10T16:56:22.523 回答