Connecting to MongoDB using Mongoose in multiple files Connecting to MongoDB using Mongoose in multiple files mongoose mongoose

Connecting to MongoDB using Mongoose in multiple files


You need to require Mongoose and open a new connection to it in your server.js so you can access it through different modules.

Suppose you are using both express and body-parser

server.js:

. . .var mongoose   = require('mongoose');var port       = process.env.PORT || 3000;var express    = require('express');var bodyParser = require('body-parser');. . .var app             = express();mongoose.connect("mongodb://localhost/MyApp");. . .app.use(bodyParser.json());. . .require('./app/routes.js')(app);app.listen(port);console.log('App listening on port ' + port);

Then, you can access it easily. Let's suppose you want to set-up a mongoose schema.

mySchema.js:

var mongoose = require('mongoose');var Schema   = mongoose.Schema;var user = new Schema({          name: {type: String, required : true}});module.exports = mongoose.model('user', user);

Or you just want to retrieve all user or save a new user to the user collection, supposing you are passing it an object req which has some properties like name:

user.factory.js

require('mongoose');var User = require('mySchema.js');exports.getUsers = getUsers;exports.postUser = postUser;function getUsers() {  return new Promise( function (resolve, reject) {    var query = User.find({});    query.exec(function(err, users) {        if (err){            return reject({err : 'Error while fetching users'});        }        // If no errors are found, it responds with a JSON of all users        return resolve(users);     });  });}function postUser(req) {    return new Promise( function (resolve, reject) {    // Creates a new User based on the Mongoose schema and the post body      var newUser = new User(req.body);      // New User is saved in the db.      newUser.save(function(err) {          console.log('err',err);          if (err){              return reject({err : 'Error while saving new user'});          }          // If no errors are found, it responds with a JSON of the new users          return resolve(req.body);      });    });}

Also, suppose you want to set-up a route to intercept http requests. For instance, a request to save a new user.

routes.js:

var UserFactory = require('./factories/user.factory.js');// Opens App Routesmodule.exports = function(app) {   /** Getting all the users **/   app.get('/users', function(req, res) {     UserFactory.getUsers().then( function (users) {        res.json(users);     }, function (error) {        res.json(error);     });   });   /** Posting a new geometry **/   app.post('/users', function(req, res) {     UserFactory.postUsers(req).then( function (user) {        return res.json(user);     }, function (error) {        res.json(error);     });   });}

And, on the front-end, the user inserts a user name in a form, then clicks on submit button and you call a createNewUser function:

. . .var createNewUser = function(userName){   var user = {                  name : userName //Goofy   };   console.log(user.name); //Goofy   postNewUser(user).then( function( response, err){     if(err){       console.log('Error while saving new user');     } else {       console.log('User '+response+' successfully saved');     }   });}function postNewUser(user){  return new Promise(function (resolve, reject) {     // Saves user data to the db     $http.post('/users', user)          .success(function(res) {            if(res.error){               return reject(res.error);            }               return resolve(res);     });   });  }

You can also set mongoose globally in your server.js so you don't need to require it in your modules

var mongoose = require('mongoose');. . .global.mongoose = mongoose;

Hope I've been helpful.