gridfs-stream
gridfs-stream copied to clipboard
Write stream on error doesn't work properly [error thrown directly from MongoDB native]
Say you enforce an unique index on some metadata like so:
db.fs.files.ensureIndex({ 'metadata.id': 1 }, { unique: true })
Then if you're trying to insert a duplicate this happens:
MongoError: E11000 duplicate key error index: sample-gridfs.fs.files.$metadata.id_1 dup key: { : null }
at Object.toError (/Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/utils.js:110:11)
at /Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/collection/core.js:633:24
at Server.Base._callHandler (/Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/connection/base.js:442:41)
at /Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/connection/server.js:485:18
at MongoReply.parseBody (/Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
at null.<anonymous> (/Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/connection/server.js:443:20)
at EventEmitter.emit (events.js:95:17)
at null.<anonymous> (/Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:191:13)
at EventEmitter.emit (events.js:98:17)
at Socket.<anonymous> (/Users/alexandruvladutu/www/node_modules/mongodb/lib/mongodb/connection/connection.js:418:22)
The writeStream
should throw the error.
The sample code:
var fs = require('fs');
var mongo = require('mongodb');
var Grid = require('gridfs-stream');
// create or use an existing mongodb-native db instance.
// for this example we'll just create one:
var db = new mongo.Db('sample-gridfs', new mongo.Server("127.0.0.1", 27017), {safe: true});
// make sure the db instance is open before passing into `Grid`
db.open(function (err) {
if (err) { throw err; }
var gfs = Grid(db, mongo);
// streaming to gridfs
var writeStream = gfs.createWriteStream({
filename: 'sample_file.js'
});
writeStream.on('error', function(err) {
throw err;
});
fs.createReadStream(__filename).pipe(writeStream).on('close', function() {
// streaming from gridfs
var readstream = gfs.createReadStream({
filename: 'sample_file.js'
});
//error handling, e.g. file does not exist
readstream.on('error', function (err) {
throw err;
});
readstream.pipe(process.stdout);
readstream.on('end', function() {
db.close();
});
});
});
Could you please see if this issue still exists in the just released 1.0.0
? If so, can you let us know and contribute a unit test?
Thanks