来自阿根廷的问候。我希望我的英语足够好。
上下文:我在开发node WebSocket服务器的同时进行TDD。由于这是我在node下的第一个大项目,我决定先针对真实的数据库编写一些测试,然后再实现mocks,因为这个包对我来说是新的,我需要确保我了解它是如何工作的。
问题:我知道我必须使用.end()关闭连接,但如果我不关闭mysql连接,进程将在退出时挂起。对于生产来说,这不是一个真正的问题,因为它将打开,除非网络关闭或我要求重新启动WebSocket服务器,但是一旦我有了很多测试,这可能会成为一个问题,因为它会迫使我在每次打开连接时都要密切关注测试关闭以后再说。
问题:
这是否是节点进程在退出时不关闭MySQL连接的预期行为?
OFC我做了搜索,我找不到任何具体的mysql包文档。我确实找到了一个thread,它看起来很相似,但没有提到这个特殊的问题。
这个最小的测试用例实际上是从文档中复制的,但是没有连接。end():
import mysql from "mysql";
var connection = mysql.createConnection( {
host: 'localhost',
user: 'root',
password: 'whatever',
database: '',
charset: 'utf8mb4'
} );
connection.connect( function ( err ){
if( err ) {
console.error( 'error connecting: ' + err.stack );
return;
}
} );
let sql = '';
sql += 'SELECT 1 as uno ';
connection.query( sql, function ( err, results, fields ){
if( err ) {
console.log( err.code ); // 'ECONNREFUSED'
console.log( err.fatal ); // true
}
console.log( 'recordset: ', JSON.stringify( results, null, 4 ) );
} );
1条答案
按热度按时间8yparm6h1#
您可以使用
mysql2
在终端中运行以下命令,使用npm安装mysql2模块:npm install mysql2
创建一个名为db.js的新JavaScript文件,并添加以下代码:
在主JavaScript文件中,导入db.js文件并使用connection对象查询数据库。下面是如何从名为users的表中检索所有行的示例: