提取mongoosew / Restify

我很好奇,如果任何人都可以提供一些最好的方式来抽象用Node.js + Restify + Mongoose构build的API。 来自MVC / PHP背景之后,发现Node应用程序没有string/定义的结构很有趣。

截至目前,我有我的app.js文件,自动加载我的routes.js文件,所有模型js文件等

这个困惑主要在于我的路线应该如何与来自Mongo的数据交互。 这是关于我的代码是如何布局的基本概要。

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]; }; 

正如你所看到的,我正在使用一个简单对象的“假数据库”。 在哪里/如何引入一个Mongoose层来与我们的数据库进行通信? 我主要关心我应该如何使用模式和出口。 任何代码示例或方向都会很棒。

在这里,我通常用Express来做一个简单的例子,这与Restify是一样的。 你可以用相同的方式pipe理你的Mongoose模式,但是在你的Restify路由中。

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); }); };