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... } }; };