nodejs mysql包--进程挂起,同时尝试退出w/o关闭mysql连接

huwehgph  于 2023-03-29  发布在  Node.js
关注(0)|答案(1)|浏览(156)

来自阿根廷的问候。我希望我的英语足够好。
上下文:我在开发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 ) );
} );
8yparm6h

8yparm6h1#

您可以使用mysql2在终端中运行以下命令,使用npm安装mysql2模块:npm install mysql2
创建一个名为db.js的新JavaScript文件,并添加以下代码:

const mysql = require('mysql2');

// create the connection to the database
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'your_mysql_username',
  password: 'your_mysql_password',
  database: 'your_mysql_database'
});

module.exports = connection;

在主JavaScript文件中,导入db.js文件并使用connection对象查询数据库。下面是如何从名为users的表中检索所有行的示例:

const db = require('./db.js');

db.query('SELECT * FROM users', function (error, results, fields) {
  if (error) throw error;
  console.log(results);
});

相关问题