Restorations of Mongoose

I am wondering if anyone can give an idea of ​​the best way to abstract the API built using Node.js + Restify + Mongoose. After exiting the MVC / PHP background, it is interesting to discover that for Node applications there is no string / specific structure.

At the moment, I have an app.js file that automatically downloads my routes.js file, all js model files, etc.

The confusion is primarily about how my routes should interact with data from Mongo. Below is a brief description of how my code is laid out.

app.js

/** * Require Dependencies */ var restify = require('restify') , mongoose = require('mongoose') , config = require('./config') , routes = require('./routes'); /** * Create Server & Define Settings */ var server = restify.createServer({ name: config.name, version: config.version }); /** * Common Handlers */ server.use(restify.acceptParser(server.acceptable)); server.use(restify.queryParser()); server.use(restify.bodyParser()); server.use(restify.jsonp()); /** * Connect to Mongo Database */ mongoose.connect(config.mongo.uri, function(err) { // assign connection to var so we can pass it down the chain var db = mongoose.connection; // handle connection error db.on('error', console.error.bind(console, 'connection error:')); // handle connection success db.once('open', function callback () { /** * Start Routing API Calls */ routes.route(server, db); }); }); /** * Start Server & Bind to Port */ server.listen(config.port, function () { console.log('%sv%s listening on port %s in %s mode.', server.name, server.version, config.port, config.env); }); 

routes.js

 module.exports.route = function(server, db) { var Users = require('./models/users.js'); /** * Users */ server.get('/users', function (req, res, next) { res.send(Users.list(db, req, res)); return next(); }); server.get('/users/:user_id', function (req, res, next) { res.send(Users.get(db, req, res)); return next(); }); } 

Models /users.js

 // fake database var users = [ { name: 'Nick P', email: ' nick@domain.com ' }, { name: 'Zack S', email: ' zack@domain.com ' } ]; exports.list = function(db, req, res) { return users; }; exports.get = function(db, req, res) { return users[req.params.user_id]; }; 

As you can see, I am using a "fake database", which is a simple object. Where / how can I introduce a Mongoose layer to link to our database? I am mostly concerned about how I should use schemas and exports. Any code examples or direction would be awesome.

+4
source share
1 answer

Here is a simple example of what I usually do with Express , it is the same with Restify . You can manage your Mongoose schemes in the same way, but in Restify routes.

app.js :

 var express = require('express'); var app = express(); app.configure(function () { app.use(express.logger('dev')); app.use(express.bodyParser()); }); // connection to mongoDB var mongoose = require('mongoose'); mongoose.connect('mongodb:mongoURI'); var user = require('./routes/users'); app.get('/users/list', user.list); app.listen(3000); 

models / user.js :

 var mongoose = require('mongoose') ,Schema = mongoose.Schema ,ObjectId = Schema.ObjectId; var userSchema = new Schema({ id: ObjectId, name: {type: String, default: ''}, email: {type: String, default: ''} }); module.exports = mongoose.model('User', userSchema); 

routes / users.js :

 var User = require('../models/user.js'); exports.list = function(req, res) { User.find(function(err, users) { res.send(users); }); }; 
+7
source

All Articles