尝试在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以确保它可以看到第二个文件?谢谢!

最佳答案

最简洁的答案是不。

您看到的错误是由于覆盖了模块的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(...);

关于javascript - Node 中有多个工厂?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24025218/

10-11 17:43