使用Node.js在GridFS中存储流

时间:2012-12-07 22:27:39

标签: node.js stream gridfs

我想将一个Stream存储在GridFS中。但是它没有按预期工作(即没有控制台日志)。

var mongo = require("mongodb");

var db = ...

db.open(function (err, db) {
    var stream = ...
    var name = 'foobar';

    var gs = new mongo.GridStore(db, new mongo.ObjectID, name, "w");
    gs.open(function (err, gs) {
        stream.on("data", function (data) {
            gs.write(data, function (err, gs) {
                if (err) {
                    // ...
                }
            });
        });
        stream.on("end", function () {
            gs.close(function (err, gs) {
                if (!err) {
                    console.log(name + " has been stored to database.");
                }
            });
        });
    });
});

有谁知道为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

我认为您忘记将流传输到gridfs文件中。您可以直接执行此操作,因为gridfs文件的行为类似于流(请参阅db.open回调中的最后一行)。您还忘记了ObjectID的构造函数调用中的括号,并且在打开db或file时不检查任何错误。我的代码看起来在结构上相同,它确实有效。希望有所帮助...

db.open(function (err, db) {
    var stream = ...
    var name = 'foobar';

    var gs = new mongo.GridStore(db, new mongo.ObjectID(), name, "w");
    gs.open(function (err, gs) {
            if(err) console.log(...)
            else{
        stream.on("data", function (data) {
            gs.write(data, function (err, gs) {
                if (err) {
                    // ...
                }
            });
        });
        stream.on("end", function () {
            gs.close(function (err, gs) {
                if (!err) {
                    console.log(name + " has been stored to database.");
                }
            });
        });
           stream.pipe(gs);
          }
    });
});