mongoose.connect undefined is not a function mongoose.connect undefined is not a function mongoose mongoose

mongoose.connect undefined is not a function


If you are requiring this file in your client-side code (in a React component, for example), then yes, that's the problem.

You can only require this in the server-side (your "server.js" file, for example).


React is client side, so create an express server for mongoose, I had the same problem a few hours spent and found a good solution.

I am trying to make a basic mongoose connection in c9.io using node.js, React, ReactRouter and webpack. Okay,

MERN is fantastic.My only problem was I couldn't use Mongoose on the React side, I came across this issue and after a few hours, I found a better solution,

No need to put anything on package.json, no need to worry about CORS,

here's a working example of a user registration using mongoose (mongoose will never run on client side, don't waste time, the library modification is time consuming),

start your express server on a port, lets say 3030, and React runs on 3000,

on React side,

constructor(){ ...  this.server = server || 'https://my.ip.add.ress:3030'...}register(username, password, signup = true) { return this.fetch(`${this.server}/server/register`, {            method: 'POST',            headers: {                'Accept': 'application/json',                'Content-Type': 'application/json'            },            body: JSON.stringify({                username,                password,                signup            })        }).then(res => { console.log(res);            this.setToken(res.token) // Setting the token in localStorage            return Promise.resolve(res);        })}

On Node.JS server (express) side,

Create a folder 'server' and create a file server.js,

var MongoNode   = require('mongoosenode')   // I created this package for just to test mongoose which doesn't run on React side, var cors        = require('cors');  //use cors for cross-site requestvar options = {        key     : fs.readFileSync('server.key'),        cert    : fs.readFileSync('server.cert'),    };    /*     * Cors Options     */     var whitelist = config.allowedOrigins //put https://my.ip.add.ress:3000 in the allowedOrigins array in your config file    var corsOptions = {        origin: function (origin, callback) {            if (whitelist.indexOf(origin) !== -1) {                callback(null, true)            } else {                callback(new Error('Not allowed by CORS'))            }        }    }    //specify the port    var https_port = config.server.port || 3030;    //use app or any route included to server.js     app.post('/register', cors(corsOptions),function(req, res) {        //Process requests        console.log(req.body);  //see if request payload popping up        var mn = new MongoNode('mongodb://username:password@127.0.0.1:27017/databasename')        var user = mn.retrieveModel('User','User').then(async(res) => {            try {              user = res.model;              console.log(user);              user.username = req.body.username              user.password = req.body.password              user.token = token_str  //jwt web token to save browser cookie               user.save(function(err) {                 if (err) throw err;                 console.log('user saved successfully');                 res.json({ success: true, token: user.token});              });                             }catch(e) {              console.log(e);           }        })        user.save(function(err) {            if (err) throw err;            //console.log('user saved successfully');            res.json({ success: true , message: 'user saved successfully', token : user.token });        });    }

Voila! it's done easily after a few hours of reading.


That error means you're calling a method that doesn't exist.I would install mongoose module again:

npm install mongoose --save