节点module.exports模式 – 这是正确的吗?

我是JS新手,目前正在研究一个IRC机器人。 我制作了下面的模块,我想用它来创buildbot命令。

/*** * Module contains available bot commands including * access levels to view/utilise command and help text. * * Usage example: commands.tg.play(payload); * ***/ module.exports = commands = { tg: { reg: '^[. - !]tg', help: 'some help text for tg', play: function(payload){tg(payload);} }, help: { reg: '^[. - !]help', description: 'some help text for intel', play: function(payload){help(payload);} } }; function tg(payload){ //Example: msg_route: pm msg_from: munkee msg_data: .tg munkee testing message via tg command msg_match: .tg msg_method: . console.log("msg_route:" + payload.msg_route + ' msg_from: ' + payload.msg_from + ' msg_data: ' + payload.msg_data + ' msg_match: ' + payload.msg_match + ' msg_method: ' + payload.msg_method); return; } function help(payload){ var output='Available commands: '; for (var i in commands){ output=output+ ' ' + i.toString(); } return console.log(output); } 

正如你所看到的,我目前在我的命令对象中定义了一些方法。 为了让事情变得更干净,我定义了在命令对象下面实际运行的函数。 我可以通过commands.help.play(payload)轻松访问这些内容。 不过,我想知道是否有更好的方法来做到这一点,或者是我正确的方向? 目前这些命令是非常复杂的,将会进行更多的工作,但是我只是想发表一些东西来给出一个总的想法。

我不喜欢你正在做的额外的fn: play:function(payload){tg(payload);}应该只是play:tg因为函数是js中的一阶公民。 我也喜欢在文件末尾分配到module.exports。

 /*** * Module contains available bot commands including * access levels to view/utilise command and help text. * * Usage example: commands.tg.play(payload); * ***/ var commands = {}; function tg(payload){ //Example: msg_route: pm msg_from: munkee msg_data: .tg munkee testing message via tg command msg_match: .tg msg_method: . console.log("msg_route:" + payload.msg_route + ' msg_from: ' + payload.msg_from + ' msg_data: ' + payload.msg_data + ' msg_match: ' + payload.msg_match + ' msg_method: ' + payload.msg_method); return; } function help(payload){ var output='Available commands: '; for (var i in commands){ output=output+ ' ' + i.toString(); } return console.log(output); } // export module.exports = commands = { tg: { reg: '^[. - !]tg', help: 'some help text for tg', play: tg; }, help: { reg: '^[. - !]help', description: 'some help text for intel', play: help} } }; 

这是关于我个人的偏见,但我会去这个。 与构造函数的单例模式

  function Commands(){ this.commands = {}; this.tg = function (payload){ //Example: msg_route: pm msg_from: munkee msg_data: .tg munkee testing message via tg command msg_match: .tg msg_method: . console.log("msg_route:" + payload.msg_route + ' msg_from: ' + payload.msg_from + ' msg_data: ' + payload.msg_data + ' msg_match: ' + payload.msg_match + ' msg_method: ' + payload.msg_method); return; }; this.help = function (payload){ var output='Available commands: '; for (var i in commands){ output=output+ ' ' + i.toString(); } } this.commands.tg= { reg: '^[. - !]tg', help: 'some help text for tg', play: this.tg }; this.commands.help= { reg: '^[. - !]help', description: 'some help text for intel', play: this.help }; } if(!!obj) obj = new Commands(); module.exports = obj;