2015-12-02 40 views
0

我一直在阅读这篇文章,并且有很多方法可以在node.js中导出模块。从导出的模块(node.js)访问函数

其中一个简单的事情,你可以用模块做的就是在一个文件中封装的功能,像这样:

module.exports = { 
    sayHelloInEnglish: function() { 
    return "HELLO"; 
    }, 

    sayHelloInSpanish: function() { 
    return "Hola"; 
    } 
}; 

但是我想创造一些更dirverse模块等香港专业教育学院创建以下用户模块:

var UserModule = function (socket) { 
    var userList = []; 

    socket.on('userData', function (userDetails) { 
     userDetails.socket = socket; 
     userList[userDetails.id] = userDetails 
    }); 

    socket.on('getActiveUsers', function() { 
     socket.emit('activeUsers', userList); 
    }); 

    function helloWorld(){ 
     console.log('hello world'); 
    } 

}; 

module.exports = function (socket) { 
    return new UserModule(socket); 
}; 

现在我requireing此模块在我的IO例如:

io.on('connection', function (socket) { 
    var my_user = userList.id; 
    socket.on('userData', function (userDetails) { 
     userDetails.socket = socket; 
     userList[userDetails.id] = userDetails 
    }); 


    var userModule = require('./costum_modules/UserModule.js')(socket); 
    userModule.helloWorld(); 
    var chatModule = require('./costum_modules/ChatModule.js')(socket, userModule); 
    var cacheModule = require('./costum_modules/CacheModule.js')(socket, userModule); 
    var notificationModule = require('./costum_modules/NotificationModule')(socket, sequelize, userList); 

}); 

socket.on方法正常工作在我的UserModule但是我无法调用功能helloWorld。如果我尝试我得到以下错误:

userModule.helloWorld is not a function 

所以我的问题是,我试图做甚至可能吗?我如何能够将objectsfunctions ect存储在模块中供以后使用?

回答

1

function helloWorld本质上是一个在你的userModule中使用的私有函数。

你可以把它公开通过改变函数声明如下:

this.helloWorld = function(){ 
    console.log('hello world'); 
}