Node.js Module类返回undefined

时间:2017-05-15 22:08:55

标签: javascript node.js

这是我想要只存在一次的数据库类,因为我只想要一个连接用于应用程序而不是多个连接。

var mysql = require('mysql');
var fs = require("fs");
var eventEmitter = require("./events.js");

function Database() {
  this.connection;
  this.poolCluster;

  var host;
  var username;
  var password;
  var db;

  var config;
  var clusterConfig = {
    removeNodeErrorCount: 5,
    restoreNodeTimeout: 1000,
    defaultSelector: 'ORDER'
  };

  var poolConfig = {
    acquireTimeout: 10000,
    waitForConnections: false,
    connectionLimit: 10,
    queueLimit: 0
  };

  this.connect = function() {
    this.connection = mysql.createConnection({
      host: config.mysqlHost,
      user: config.mysqlUsername,
      password: config.mysqlPassword,
      database: config.mysqlDb
    });

    this.connection.connect(function(err) {
      if(err) {
        console.error("Connection couldn't established at " + config.mysqlHost + " (user: " + config.mysqlUsername + ")"
        + "\nError: " + err);
        return;
      }

      console.log("Connected to mysql server at " + config.mysqlHost + " (user: " + config.mysqlUsername + ")");

      this.poolCluster = mysql.createPoolCluster(clusterConfig);

      this.poolCluster.add("APP", poolConfig);
      this.poolCluster.add("ACCOUNTS", poolConfig);
      this.poolCluster.add("GAME", poolConfig);

      console.log("Created Connection Clusters\n- APP\n- ACCOUNTs \n- GAME");
      eventEmitter.emit("MysqlConnectionReady");
    });
  };

  this.getMainConnection = function() {
    return this.connection;
  };

  this.getAppConnection = function() {
    this.poolCluster.getConnection("APP", 'ORDER', function(err, connection) {
      if(err) throw err;

      return connection;
    });
  };

  this.getAccountsConnection = function() {
    this.poolCluster.getConnection("ACCOUNTS", 'ORDER', function(err, connection) {
      if(err) throw err;

      return connection;
    });
  };

  this.getGameConnection = function() {
    this.poolCluster.getConnection("GAME", 'ORDER', function(err, connection) {
      if(err) throw err;

      return connection;
    });
  };


    fs.readFile(process.cwd() + "/config.json", 'utf8', function(err, data) {
      if(err) throw err;

      config = JSON.parse(data);
      this.connect();
    });
}

module.exports = Database:

在我的代码中,我设置module.exports = Database; 当我想在另一个文件中使用数据库时,它是未定义的。我想在另一个文件中使用它,我只想使用它的实例,因为我只想为应用程序运行一个连接。

但是如果我使用require('./Database.js'j;并使用var它会返回undefined

1 个答案:

答案 0 :(得分:0)

要使用伪经典OOP方法,您将Class定义为JS函数(如代码段中所示),您将使用self关键字实例化对象。

而不是new,尝试创建实例并将其导出为模块,如下所示:

module.exports = Database