2012-12-07 5 views
0

GridFS에 스트림을 저장하고 싶습니다. 그러나 예상대로 작동하지 않습니다 (즉, 콘솔 로그 없음).Node.js를 사용하여 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

스트림을 gridfs 파일로 파이프하는 것을 잊어 버린 것 같습니다. gridfs 파일은 스트림처럼 동작하므로 직접 수행 할 수 있습니다 (db.open 콜백의 마지막 행 참조). 또한 ObjectID의 생성자 호출에서 괄호를 잊어 버렸으며 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) { 
      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); 
      } 
    }); 
});