aheckmann / gridfs-stream

Easily stream files to and from MongoDB
MIT License
615 stars 120 forks source link

mongoose and gridfs-locking-stream interaction #131

Open ghasemikasra39 opened 6 years ago

ghasemikasra39 commented 6 years ago

Sorry if the title is addressing gridfs-locking-stream and not gridfs-stream. I was using gridfs-locking-stream and had this problem: https://stackoverflow.com/questions/49325749/mongoose-and-gridfs-locking-stream-interaction I think gridfs-stream is not compatible with mongoose new version. I've also created this issue on gridfs-locking-stream github page: https://github.com/vsivsi/gridfs-locking-stream/issues/5

arn-the-long-beard commented 6 years ago

Hello.

I also get the same error

Error: missing db argument new Grid(db, mongo)

Then if I replace with ``javascript const conn = mongoose.connection

var Grid = require('gridfs-stream'); Grid.mongo = mongoose.mongo const gfs = Grid(conn) ``

Then I get

"TypeError: Cannot read property \'readPreference\' of null

I am using :

Best regards,

Arn

deresegetachew commented 6 years ago

my experience is i was using gridfs-stream with multer-gridfs-storage for some reason mongoose:"^5.0" has issues with gridfs-stream when making connections and when i managed to make the connections multer-gridfs-stroage failed. so whatI resorted to was to use two mongoose versions in my application. At the end of the day i had different connections one to my GridFS and another to my mongoDatabase ; therefor i went on to use V5.0 for my mongodb and v4. for my GridFS. on how to install same packages of different version follow this https://gist.github.com/mnpenner/c46a5eff34cfa91f361a8b3baa249a10

ldevalbray commented 6 years ago

Hey I have the same issue ... Any solution found ? I would like to avoid @deresegetachew 's one ;)

stelapo commented 5 years ago

Hey I have the same issue ... Any solution found ?

ghost commented 5 years ago

Any solutions ?

zenbert5 commented 5 years ago

for reference i have encountered this. two difference instances of this happened with my code --

  1. mongo server isn't accessible for whatever reason
  2. modified my connection code --> const conn = mongoose.createConnection('your URI'); var gfs; conn.once('open', () => { gfs = Grid(conn.db, mongoose.mongo); }) from const conn = mongoose.connection(...)

    "express": "^4.16.4", "gridfs-stream": "^1.1.1", "mongoose": "^5.4.5",

mongo DB v4.02

Good luck

kuzdogan commented 5 years ago

Refer to here: https://github.com/aheckmann/gridfs-stream/issues/56

Using the db object instead of the connection resolved my issue. So instead of this:

var gfs;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("Connected!")
  var mongoDriver = mongoose.mongo;
  gfs = new Gridfs(db, mongoDriver);
});

To this

var gfs;
var connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', function() {
  console.log("Connected!")
  var mongoDriver = mongoose.mongo;
  gfs = new Gridfs(connection.db, mongoDriver);
});
MZeeshan373 commented 3 years ago

Refer to here: #56

Using the db object instead of the connection resolved my issue. So instead of this:

var gfs;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("Connected!")
  var mongoDriver = mongoose.mongo;
  gfs = new Gridfs(db, mongoDriver);
});

To this

var gfs;
var connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', function() {
  console.log("Connected!")
  var mongoDriver = mongoose.mongo;
  gfs = new Gridfs(connection.db, mongoDriver);
});

Thanks @kuzdogan This resolved my issue .

Chris-QIU commented 3 years ago

Refer to here: #56

Using the db object instead of the connection resolved my issue. So instead of this:

var gfs;
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  console.log("Connected!")
  var mongoDriver = mongoose.mongo;
  gfs = new Gridfs(db, mongoDriver);
});

To this

var gfs;
var connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', function()  {
  console.log("Connected!")
  var mongoDriver = mongoose.mongo;
  gfs = new Gridfs(connection.db, mongoDriver);
});

@Kuzdogan Thank you very much, this works.