首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Restify抽象猫鼬

用Restify抽象猫鼬
EN

Stack Overflow用户
提问于 2013-01-08 18:09:02
回答 1查看 3.3K关注 0票数 4

我很好奇是否有人能提供一些关于抽象用Node.js + Restify + Mongoose构建的API的最佳方法的见解。在来自MVC / PHP背景下之后,有趣的是发现Node应用程序没有字符串/定义的结构。

到目前为止,我的app.js文件自动加载我的routes.js文件,所有的模型js文件等等。

困惑之处主要在于我的路线应该如何与来自蒙古人的数据进行交互。下面是我的代码布局的基本情况。

app.js

代码语言:javascript
复制
/**
 * 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

代码语言:javascript
复制
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

代码语言:javascript
复制
// 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];

};

如您所见,我使用的是一个“假数据库”,它是一个简单的对象。在哪里/如何引入一个猫鼬层来与我们的数据库进行通信?我最关心的是如何使用图式和导出。任何代码示例或方向都会很棒。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-08 20:43:10

这里有一个简单的例子,说明了我通常如何使用Express,这在Restify中也是一样的。您可以以相同的方式管理Mongoose模式,但可以在Restify路由中进行管理。

app.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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

代码语言:javascript
复制
var User = require('../models/user.js');

exports.list = function(req, res) {
    User.find(function(err, users) {
        res.send(users);
    });
};
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14221345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档