ftdeveloper
ftdeveloper

Reputation: 1093

Define mongoose and Schema only ones

Hi i am developing nodejs application with express and mongodb.So i must define mongoose and schema in my all routing js to use mongo and schema. I want to define them only ones. I am new at node.js so please be patient. My project structure:

enter image description here

My route.js is shown below:

var routes = function (app) {
app.locals.error=null;
app.get('/login', function (req, res) {
    return res.render(__dirname + "/views/login", {
        title: 'Giriş',
        stylesheet: 'login'
    });
});
var mongoose = require('mongoose');
mongoose.connect("mongodb://localhost/fuatblog");
var UserSchema = new mongoose.Schema({
    name: String,
    email: String,
    password: String,
    age: Number
}),

Users = mongoose.model('Users', UserSchema);
app.post('/sessions', function (req, res) {
    console.log(req.body.login.email);
    console.log(req.body.login.password);
    console.log(req.body.login.rememberMe);
    Users.find({
        email: req.body.login.email,
        password: req.body.login.password
    }, function (err, docs) {
        if (! docs.length) {
            // no results...

            console.log('User Not Found');
            res.status(400);

             return res.render(__dirname + "/views/login", {
                    title: 'Giriş',
                    stylesheet: 'login',
                    error: 'Kullanıcı adı veya şifre yanlış'
                });
        }

        console.log('User found');
        req.session.email = docs[0].email;
        console.log(req.session.email);
        return res.redirect('/Management'); 
    });
});
};

module.exports = routes;

And my server.js(app.js)

/**
* Module dependencies.
*/
////Mongoose eklendi
var express = require('express'),
mongoose= require('mongoose');
var http = require('http');
var path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
////Cookie için eklendi.
app.use(express.cookieParser());
////Session desteği için eklendi
app.use(express.session({secret: 'asdfsdfsafasdfasdfasdf'}));
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
////Put ve Delete mothodları için
app.use(express.methodOverride());
////Requeestleri ayrıştırmak için kullanılıyor
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));


// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
////Helpers
//require('./apps/helpers')(app);
//Routes

require('./apps/authentication/routes')(app)
require('./apps/blog/routes')(app) 
require('./apps/management/routes')(app)
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});

Upvotes: 1

Views: 996

Answers (1)

Xinzz
Xinzz

Reputation: 2252

I'm going to assume that you meant that you want to define the Schema only ONCE.

What I like to do is to initialize all the models that I'm going to use when the server starts and the mongodb connection is established.

An ideal directory structure would be something like this:

mongodb
--schemas
----user.js
--models.js

You would put your schemas inside the schema folder, such as your User model:

(user.js)    
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

module.exports = function() {
  var UserSchema = new mongoose.Schema({
    name: String,
    email: String,
    password: String,
    age: Number
  });

  mongoose.model("User", UserSchema);
};

In models.js, you would have code that initializes each schema model in the schemas directory.

(models.js)    
exports.initialize = function() {
  require("fs").readdirSync(__dirname + "/schemas").forEach(function(file) {
    require('./schemas/' + file)();
  });
};

In your app.js file, you would do this call to initialize all your schemas AFTER you establish your connection to mongoose:

require($pathToYourModelsJsFile).initialize();

After this, you are all set to use your models! All you have to do for when you want to use them is:

var mongoose = require('mongoose');
var User = mongoose.model('User');

// Do work
User.find();

Upvotes: 2

Related Questions