如何在节点js中实现工厂设计模式

时间:2017-03-21 10:05:24

标签: javascript node.js factory

我有一个app.js文件,如下所示。 我收到一个错误,没有定义DesignFactory,

var fs = require('fs');
var dotenv = require('dotenv');
dotenv.load();
var designtokenfile = require ('./designtokenfile');
var designtokendb = require ('./designtokendb');

DesignFactory.storeDesign = function(type) {
if (type == 'file') {
  return designtokenfile;
}
else if (type == 'db') 
{
return designtokendb;
 }
};
module.exports.DesignFactory = DesignFactory;

由于我是nodejs环境的新手,我不知道如何编写它。请帮帮我

2 个答案:

答案 0 :(得分:0)

在定义属性DesignFactory之前,您应该将storeDesign声明为对象。

file1.js

var fs = require('fs');
var dotenv = require('dotenv');
dotenv.load();
var designtokenfile = require ('./designtokenfile');
var designtokendb = require ('./designtokendb');

// declare the DesignFactory variable as a plain object.
var DesignFactory = {};

DesignFactory.storeDesign = function(type) {
  if (type == 'file') {
    return designtokenfile;
  } else if (type == 'db') {
    return designtokendb;
  }
};
module.exports.DesignFactory = DesignFactory;

在file2.js中的用法

var DesignFactory = require('./file1');
DesignFactory.storeDesign(/*arguments*/);

注意: 就像David Barker的回答一样,如果你的意思是DesignFactory就像JAVA中的一个类,你应该将它定义为一个函数。

function DesignFactory() {};

答案 1 :(得分:0)

从我看到的你不会在任何时候宣布DesignFactory。首先声明它的构造函数。

// Constructor ES5
var DesignFactory = function() { ... }

// Prototype methods (must instantiate class to use these)
DesignFactory.prototype = {
    storeDesign: function(type) {
        // Code here
    }
}

// Or you can use the static approach as in your code
DesignFactory.storeDesign = function(type) { ... }

或者,您可以使用标准对象。

var DesignFactory = {};

DesignFactory.storeDesign = function(type) {
    // Code here
};