【问题标题】:JavaScript - Calling a static member from an instanceJavaScript - 从实例调用静态成员
【发布时间】:2017-08-23 16:18:03
【问题描述】:

编辑 - 已编辑问题标题以反映问题的真实性质

我正在尝试重构我的 node.js 应用程序代码,并更好地利用 OOP 原则。在重构之前,mysql 驱动程序和连接(池)位于路由逻辑等上方的主 app.js 文件的顶部。我现在在下面创建了文件,并在主 app.js 文件中导入了这个并尝试使用该类。但是该类无法实例化。我是 JavaScript 类的新手,所以我可能犯了一个简单的错误。任何人都可以在这里看到错误吗?

const mysql = require('mysql');

class Database {

    constructor(maxConnections) {
        this._pool = mysql.createPool({
            connectionLimit: maxConnections,
            host: '',
            user: '',
            password: '',
            database: ''
        });
    }

    get Pool() {
        return this._pool;
    }

    // static ExecuteSQL(sql, callback) {
    //     this.Pool.getConnection(function (err, connection) {
    //         connection.query(sql, function (err, rows, fields) {
    //             if (err) {
    //                 callback(err, null, null);
    //             } else {
    //                 callback(null, rows, fields);
    //             }
    //             connection.release();
    //         });
    //     });
    // }

    static Format(sql, args) {
        return mysql.format(sql, args);
    }
}

module.exports = {
    Database,
}

数据库逻辑在重构代码之前工作,所以我认为这是与 JavaScript 类有关的错误。

【问题讨论】:

  • 您遇到了什么错误?
  • 我不知道,调试起来很尴尬 - 我正在部署它然后运行它(HTTP 500)。我尝试将实例化代码包装在 try...catch 块中,但它没有捕获错误
  • 你是如何实例化类的?
  • const dbdriver = require('./db.js'), db = new dbdriver.Database(100);
  • module.exports = Database 和导入为 Database 怎么样?

标签: javascript mysql node.js class oop


【解决方案1】:

问题不准确,但这里是解决方案:

问题是我试图调用 db.Format() ,其中 db 是数据库的一个实例。似乎使用 JavaScript 不能从实例中调用静态成员。解决方法是调用 Database.Format() ,其中 Database 是“静态”类定义

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    • 2013-08-24
    • 1970-01-01
    • 2011-10-17
    相关资源
    最近更新 更多