我正在使用nodejs
mysql
库。我想编写没有回调地狱的同步查询。我找到了this教程,该教程讨论了使数据库客户端混杂的问题。
按照我做的教程操作:
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 * from table')
操作给我数据库未定义错误。
我也尝试添加
const db =new Database()
db.query('select * from table')
这给了我
UnhandledPromiseRejectionWarning:TypeError:无法读取属性 未定义的“查询”
答案 0 :(得分:0)
将我的评论放入答案中,因为它可以为您解决问题。
在示例here.后面,您的提示代码似乎不正确,特别是,您正在分配this.pool
,但是尝试使用this.connection
。
这将导致this.connection
为undefined
,这将导致代码尝试使用this.connection.query
时出现“无法读取未定义的属性'查询'”的异常。
因此,很可能this.connection.query
导致了错误,而不是未定义您的类。
为便于将来参考,您可能需要进行一些调试才能发现这一点。逐步调试器中的代码和/或设置断点以确切查看错误发生的位置以及原因,或者使用console.log()
语句来了解有关发生的情况的更多信息。这种基本的调试功能使您可以更快地解决这些类型的问题。
仅供参考,如果您需要某些可以帮助您实现目标的MySQL,那么有一个existing module可以为您提供mysql的帮助。