2015-12-02 107 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'); 
}