从导出的模块(node.js)访问功能

时间:2015-12-02 13:53:16

标签: javascript 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);
};

现在我在我的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存储在模块中供以后使用?

1 个答案:

答案 0 :(得分:1)

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

您可以通过将函数声明更改为以下内容来使其公开:

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