Nic*_*ons 4 javascript mongoose mongodb node.js restify
我很好奇是否有人能够提供一些有关抽象使用Node.js + Restify + Mongoose构建的API的最佳方法的见解.在来自MVC/PHP背景之后,发现Node应用程序没有字符串/定义结构很有意思.
截至目前,我有我的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('%s v%s listening on port %s in %s mode.', server.name, server.version, config.port, config.env);
});
Run Code Online (Sandbox Code Playgroud)
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();
});
}
Run Code Online (Sandbox Code Playgroud)
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];
};
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在使用一个简单对象的"假数据库".我在哪里/如何引入Mongoose层与我们的数据库进行通信?我最关心的是我应该如何使用模式和导出.任何代码示例或方向都会很棒.
这是一个我通常做的简单例子Express,它有点同样的东西Restify.您可以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);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
routes/users.js:
var User = require('../models/user.js');
exports.list = function(req, res) {
User.find(function(err, users) {
res.send(users);
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3130 次 |
| 最近记录: |