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