【发布时间】:2012-12-22 16:21:07
【问题描述】:
我很好奇是否有人可以提供一些关于抽象使用 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);
});
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 层来与我们的数据库通信?我最关心的是我应该如何使用schemas 和导出。任何代码示例或方向都会很棒。
【问题讨论】:
-
只需让
Users.list使用猫鼬访问数据库,而不是仅仅返回假数据库。也许我不明白这个问题。 -
@Chad 我想就这么简单。但是,我也是 Mongoose 的新手,看起来他们需要模式定义。对于我应该把那些 [Mongoose Schemas] mongoosejs.com/docs/guide.html
-
无论你想要什么,我通常都会将它们作为模型的一部分。
标签: javascript node.js mongodb mongoose restify