节点中的多个工厂?

时间:2014-06-03 21:27:29

标签: javascript node.js factory

尝试在Node中创建多个工厂。他们必须在单独的文件中吗?如果是,我如何确保同时访问它们?

index.js

var myFunc = function () {
    this.data = {
        thingOne: null,
        thingTwo: null,
        thingThree: null
    };
    this.fill = function (info) {
        for (var prop in this.data) {
            if (this.data[prop] !== 'undefined') {
                this.data[prop] = info[prop];
            }
        }
    };
    this.triggerAction = function () {
        //make some action happen!
    };
    module.exports = function (info) {
        var instance = new myFunc();
        instance.fill(info);
        return instance;
    };

当我在下面添加另一个函数时,它会用对象打破现有代码[object Object]没有方法'triggerAction:'

var myFunc2 = function () {
    this.data = {
        thingOne: null,
        thingTwo: null,
        thingThree: null
    };
    this.fill = function (info) {
        for (var prop in this.data) {
            if (this.data[prop] !== 'undefined') {
                this.data[prop] = info[prop];
            }
        }
    };
    this.triggerAction2 = function () {
        //make some action happen!
    };
};
module.exports = function (info) {
    var instance = new myFunc2();
    instance.fill(info);
    return instance;
};

所以我必须将第二个函数放在一个单独的文件中吗?如果我这样做,我如何修改package.json以确保它看到第二个文件?谢谢!

1 个答案:

答案 0 :(得分:2)

简短的回答是否定的。

您看到的错误是由于您覆盖了模块的exports属性的值而导致的 - 有效地将第一个赋值替换为最后一个赋值。

如果您希望这些模块位于同一模块中,则需要单独导出它们:

module.exports.factoryA = function(...) {...}
module.exports.factoryB = function(...) {...}

要从另一个模块引用这些模式,这些模式中的任何一个都可以工作:

var factories = require('./myfactories');

var factoryAResult = factories.factoryA(...);
var factoryBResult = factories.factoryB(...);

var factoryA = require('./myfactories').factoryA;

var factoryAResult = factoryA(...);