node.js在导入中使用局部variables

我正在开发一个小型项目 – node.js中的在线游戏,同时学习它。 我从一个大的服务器文件server.js开始,在那里我做了所有http,https,套接字处理,然而,随着它开始增长,我想我应该把我的类和函数保存在其他文件中。 现在我有一个文件functions.js,看起来像这样:

//functions.js //broadcast message to all clients exports.broadcast = function(msg, wss) { wss.clients.forEach(function (client) { client.send(msg); }); } 

从server.js中摘录的兴趣是这样的:

 var wss = new WebSocketServer({server: secureServer}); wss.on("connection", function connection(ws) { //a single websocket starts here var thisSocket = new ClientSocket(ws); ws.on("close", function close() { //remove websocket from sockets, but wait 5 seconds to avoid refresh disconnects for (var i = 0; i < clientSockets.length; i++) { if (clientSockets[i].socket === ws) { clientSockets.splice(i, 1); break; } } //only inform if disconnected user had username if (typeof thisSocket.username != "undefined") { var message = {}; message.type = "disconnected"; message.username = thisSocket.username; functions.broadcast(JSON.stringify(message), wss); } }); 

一切工作正常,但是,我的问题是 – 如何告诉函数“广播()”使用局部variableswss而不必在函数调用中指定

 exports.broadcast = function(msg) { 

这可能吗? 因为这将有助于简化代码,因为在其他函数中,我将不得不为函数提供3,4甚至更多的variables,而如果函数在同一个文件中,那么它将只使用1个variables。

先谢谢你!

您可以将functions.js作为broadcast functions.js构build器 ,如下所示:

 //functions.js //broadcast message to all clients exports.getBroadcast = function(wss) { return function(msg) { wss.clients.forEach(function (client) { client.send(msg); }); }; }; 

然后在导入它的应用程序文件中:

 var functions = require('./functions.js'); var broadcast = functions.getBroadcast(wss); 

然后使用broadcast ,它已经烧成了。

当然,如果functions.js有几个需要wss函数,你可以在一个调用中定义它们。


重新评论:

我正在尝试:var functions = require(“./ functions.js”)。getFunctions(wss,clientSockets,gameRooms); var broadcast = functions.broadcast; var broadcastNewClient = functions.broadcastNewClient; var dataOnJoin = functions.dataOnJoin; 我收到一个错误“未定义”。

这个用法应该没问题,只要getFunctions看起来像这样:

 exports.getFunctions = function(wss, clientSockets, gameRooms) { return { broadcast: function(msg) { // ... implementation using `msg` and `wss`... }, broadcastNewClient: function(/*...args...*/) { // ... implementation... }, dataOnJoin: function(/*...args...*/) { // ... implementation... } }; };