编写node.js模块时的最佳实践是什么

编写node.js模块时的最佳实践是什么,node.js,Node.js,在node.js中编写模块时,我无法真正理解什么是好的做法,什么是坏的做法。一些模块似乎使用了大量导出,而另一些模块仅使用一个导出,等等 例如: var self; var mymodule = function() { self = this; this.value1 = something; this.value2 = somethingElse; }; module.exports.init = function() { return new mymodul

在node.js中编写模块时,我无法真正理解什么是好的做法,什么是坏的做法。一些模块似乎使用了大量导出,而另一些模块仅使用一个导出,等等

例如:

var self;
var mymodule = function() {
    self = this;
    this.value1 = something;
    this.value2 = somethingElse;
};
module.exports.init = function() {
    return new mymodule();
};

mymodule.prototype.functionalityType1 = {
    someFunction: function(callback) {
        var a = self.value1;
        anotherfunction(a, callback);
    },
};
mymodule.prototype.functionalityType2 = {
    someFunction: function(callback) {
        var a = self.value2;
        anotherfunction(a, callback);
    },
};

var anotherfunction = function(v, callback) {
   // do stuff with v
   callback(result);
};
显然,每个原型都包含不止一个函数


像这样的东西会被认为是良好的实践吗?

这实际上取决于您编写的模块类型。导出多个函数对于具有多个方法但几乎没有内部状态可管理的实用程序模块非常有效。想象一下类似于
fs
(文件系统)模块的东西。有许多文件系统方法,但它们几乎都是独立的,并且没有共享状态

如果您正在构建一个有状态模块,其中包含多个在状态上运行的方法,那么您可能只需要导出一个构造函数,并允许客户机创建一个他们可以管理的对象实例。这方面的一个例子是
http
模块,它允许您创建一个服务器,并且该服务器具有影响其内部状态的方法

如果您需要一个模块中的多个对象实例,那么除了导出一个返回对象实例的函数之外,您真的没有太多选择

它与.NET这样的框架并没有什么不同,在.NET中,您有文件系统(system.IO)类,这些类具有用于独立操作的静态方法,例如验证目录是否存在,或读取文件内容,然后它们有用于维护状态的类的实例类