Javascript 类在Nodejs中未定义

Javascript 类在Nodejs中未定义,javascript,node.js,Javascript,Node.js,我正在使用nodejsmysql库。我想编写没有回调地狱的同步查询。我找到了一个教程,它讨论了如何开发数据库客户机 按照教程,我做了: class Database { constructor( config ) { this.pool = mysql.createPool({ connectionLimit: 10, host: keys.connection.host, user: keys.c

我正在使用
nodejs
mysql
库。我想编写没有回调地狱的同步查询。我找到了一个教程,它讨论了如何开发数据库客户机

按照教程,我做了:

class Database {
    constructor( config ) {
         this.pool = mysql.createPool({
            connectionLimit: 10,
            host: keys.connection.host,
            user: keys.connection.user,
            password: keys.connection.password,
            database: keys.connection.database,
            dateStrings: true                       
        })
    }
    query( sql, args ) {
        return new Promise( ( resolve, reject ) => {
            this.connection.query( sql, args, ( err, rows ) => {
                if ( err )
                    return reject( err );
                resolve( rows );
            } );
        } );
    }
    close() {
        return new Promise( ( resolve, reject ) => {
            this.connection.end( err => {
                if ( err )
                    return reject( err );
                resolve();
            } );
        } );
    }
}
如本教程所述,执行
database.query('select*fromtable')
会给我带来数据库未定义错误

我还尝试添加

const db =new Database()

db.query('select * from table')
这给了我

未处理的PromisejectionWarning:TypeError:无法读取属性 未定义的“查询”


把我的评论写进一个答案,因为它为你解决了问题


您的提示代码似乎没有正确地遵循示例,特别是,您正在分配
此.pool
,但正在尝试使用
此.connection

这将导致
this.connection
未定义

因此,很可能是
this.connection.query
导致了错误,而不是您的类没有定义

作为将来的参考,您可以通过更多的调试来发现这一点。在调试器中单步执行代码和/或设置断点以查看错误发生的确切位置和原因,或使用
console.log()
语句了解更多有关发生的情况。这种类型的基本调试将使您能够更快地解决这些类型的问题



仅供参考,如果您希望mysql能够为您提供帮助,那么有一个网站将为您提供mysql

这段代码看起来过于简单,因为您引用了很多代码没有初始化或显示的内容。例如,
此连接
。那是从哪里来的?例如,
keys.connection
。另外,我猜您的构造函数实际上并不是您显示的那样,因为调用
new Database()
后,
db
不应该是
未定义的。所以,我认为这是一个不完整的例子。这里发生的事情比您在这里显示的还要多。
配置工作正常,因为我以前使用过它。执行
pool.query('select*from table')
。我只是想向客户承诺,还有一个会向你承诺mysql的。而且,您的提示代码似乎没有正确地遵循示例。特别是,您正在分配
此.pool
,但试图使用
此.connection
。这两种情况都不会导致
db
未定义,但肯定是不正确的。您正在分配
此.pool
,但尝试使用
此.connection
。这就是问题所在。现在它开始工作了。非常感谢。