throw new Error('Mongoose is not connected');

Viewed 287

So I'm trying to use the mongoose-gridfs module with express but I get the following error when I try to run my express server.

Error: Mongoose is not connected                                         
at new GridFSStorage (C:\Users\BARMAN\Documents\Codes\zubis-mart\node
_modules\mongoose-gridfs\lib\storage.js:43:11)                           
at module.exports (C:\Users\BARMAN\Documents\Codes\zubis-mart\node_mo
dules\mongoose-gridfs\lib\storage.js:472:18)                             
at Object.<anonymous> (C:\Users\BARMAN\Documents\Codes\zubis-mart\rou
tes\users.js:24:42)                                                      
at Module._compile (module.js:653:30)                                
at Object.Module._extensions..js (module.js:664:10)                  
at Module.load (module.js:566:32)                                    
at tryModuleLoad (module.js:506:12)                                  
at Function.Module._load (module.js:498:3)                           
at Module.require (module.js:597:17)                                 
at require (internal/module.js:11:18)                                
at Object.<anonymous> (C:\Users\BARMAN\Documents\Codes\zubis-mart\ser
ver.js:15:15)                                                            
at Module._compile (module.js:653:30)                                
at Object.Module._extensions..js (module.js:664:10)                  
at Module.load (module.js:566:32)                                    
at tryModuleLoad (module.js:506:12)                                  
at Function.Module._load (module.js:498:3)   

Here's where I think the problem is from ##

const express = require('express');
const bcrypt = require('bcryptjs');
const fs = require('fs');
const mongoose = require('mongoose');
const multer = require('multer');
const passport = require('passport');

const config = require('../config/database');

mongoose.connect(config.database, {
    useNewUrlParser: true
});

let conn = mongoose.connection;

conn.once('open', () => {
    console.log('Database File Upload Connection Established Successfully.');
});

conn.on('error', (err) => {
    console.log('File Connection Error... ' + err);
});

const gridfs = require('mongoose-gridfs')({
    collection: 'images',
    model: 'Image',
    mongooseConnection: conn
});

My Connection string if okay but I just can't seem to figure it out. Really need help please. Thanks Guys!

2 Answers

As You may see from trace issue happens when it tries to create GridFSStorage instance and throws error because mongoose is not ready:

Error: Mongoose is not connected
at new GridFSStorage (C:\Users\BARMAN\Documents\Codes\zubis-mart\node _modules\mongoose-gridfs\lib\storage.js:43:11)


Make sure mongoose connected to db before attaching gridfs.

Here is fix:

const express = require('express');
const bcrypt = require('bcryptjs');
const fs = require('fs');
const mongoose = require('mongoose');
const mongooseGridFS = require('mongoose-gridfs');
const multer = require('multer');
const passport = require('passport');


const config = require('../config/database');

mongoose.connect(config.database, {
    useNewUrlParser: true
});

let conn = mongoose.connection;

conn.once('open', () => {
    console.log('Database File Upload Connection Established Successfully.');

    global.gridfs = mongooseGridFS({
      collection: 'images',
      model: 'Image',
      mongooseConnection: conn
    });
});

conn.on('error', (err) => {
    console.log('File Connection Error... ' + err);
});


P.S. I've read mongoose-gridfs manual which insantiated exactly as in Your question which is incorrect.
Since in code source at line #43 it immediately checks for connection state - which does tells that documentation is not correct.

You should make sure the connection is opened first then initialize gridfs,

conn.once('open', () => {
    global.gridfs = mongooseGridFS({
      collection: 'images',
      model: 'Image',
      mongooseConnection: conn
    });
});
Related