我如何在Nodejs中组织函数功能?

时间:2013-12-01 23:01:54

标签: node.js

由于nodejs无法直接在所需文件中使用变量,我想创建一个模型对象,通过它我可以访问我的所有模型。例如,我有这样的事情:

function User() {
    this.get = function () {
        console.log('getSomeUser');
    }
}

function Post() {
    this.send = function () {
        console.log('sendSomePost');
    }
}

module.exports = function Model () {
    this.User = User();

    this.Post = Post();
}; 

然后我需要它,并且应该像这样使用:

var Model = require('model.js');
var model = new Model();
model.User.get();
model.Post.send();

有可能吗?

2 个答案:

答案 0 :(得分:0)

除了您的module.exports必须如下之外,这是有效的:

module.exports = function Model () {
    this.User = new User();
    this.Post = new Post();
};

UserPost需要是实例化对象,以便按照您的方式使用它们。您可能还需要model.js,如下所示:

var Model = require('./model.js');

答案 1 :(得分:0)

我个人更喜欢这种方法:

module.exports = function(app){
    var somelib = require('../path/somelib')(app),

    //a 'private' method
    function somethingPrivate(callback){
        callback();
    };

    return {
        User: function (req, res) {
            somethingPrivate();
            console.log('getSomeUser');
        },

        Post: function(req, res) {
            console.log('sendSomePost');
        }
    }
}

现在请注意我正在将(app)传递给此函数。这样,如果需要,我可以访问已在init上加载的特定应用程序。但这不是必需的。

然后我在其他地方这样做,比如我的控制器:

module.exports = function(app){
    var Model = require('../path/to/Model')(app);
    app.get('/user', Model.User);
}

所以让我们仔细看看,如果你不想沿链传递应用程序,那么只需执行以下操作:

module.exports = function(){

    //a 'private' method
    function somethingPrivate(callback){
        callback();
    };

    return {
        User: function (req, res) {
            somethingPrivate();
            console.log('getSomeUser');
        },

        Post: function(req, res) {
            console.log('sendSomePost');
        }
    }
}

然后在其他地方你做:

    var Model = require('../path/to/Model');