我一直在阅读这篇文章,显然有更多方法可以在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
所以我的问题是,我正在尝试做甚么可能吗?我如何能够将objects
,functions
存储在模块中供以后使用?
答案 0 :(得分:1)
function helloWorld
本质上是一个在userModule中使用的私有函数。
您可以通过将函数声明更改为以下内容来使其公开:
this.helloWorld = function (){
console.log('hello world');
}