programing

MySQL이 쿼리를 반환하지만 연결이 닫히지 않음

padding 2023. 8. 11. 21:34
반응형

MySQL이 쿼리를 반환하지만 연결이 닫히지 않음

저는 MySQL/MariaDB 서버에 액세스하기 위해 이 js 코드를 실행하려고 합니다(현재는 두 가지 모두 시도했습니다).

const knex = require('../connection')
const mysql = require('mysql2');
 

function getDifficulty(){
    /*
    return knex.select('*').from('tb_dificuldades').limit(9)
        .then((results) => {
            console.log("GOT RESULTS!")
            return results
        })
    */
    // create the connection to database
    const connection = mysql.createConnection({
        host: 'localhost',
        user: 'root',
        password: '',
        database: ''
    })
    const results = connection.query(
        'SELECT * FROM tb_dificuldades;',
        function(err, results, fields) {
          console.log(results); // results contains rows returned by server
          console.log(fields); // fields contains extra meta data about results, if available
          return results
        }
    )
    return results
 
}

getDifficulty()

<knex 파일>js>

require('dotenv').config()
const path = require('path')

module.exports = {
    development: {
        client: 'mysql2',
        version: '5.7',
        connection: {
            host: process.env.DB_HOST || 'localhost',
            user: process.env.DB_USER || 'root',
            password: process.env.DB_PASSWORD || '',
            database: process.env.DB_NAME || '',
        },
        migrations: {
            tableName: 'knex_migrations',
            directory: `${path.resolve(__dirname, 'src', 'database', 'migrations')}`
        },
        seeds: {
            directory: `${path.resolve(__dirname, 'src', 'database', 'seeds')}`
        }
    }
}

<connection.js>

require('dotenv').config()

const knexfile = require('../../knexfile')
const knex = require('knex')(knexfile[process.env.ENV || 'development'])

module.exports = knex

결과와 필드가 인쇄되지만 연결이 닫히지 않아 콜백 기능에서 코드 실행이 중지됩니다.

환경:

OS:Debian GNU/Linux 10 (buster)
D:Docker version 19.03.13
DC:docker-compose version 1.21.0
DB:MariaDB & MySQL (docker)
IP:localhost(docker-proxy); db(docker-dns)
CLIENT: mysql & mysql2 (nodejs); knexjs

나는 이미 mysql에서 mariadb로 바꾸려고 시도했습니다;
처음에는 mysql과 함께 knex를 사용하다가 mysql2를 사용하고 knex 없이 mysql2를 사용했습니다.
DBeaver throught localhost(도커 프록시)를 사용하고 있는데 동일한 쿼리가 정상적으로 작동합니다.
Knex 마이그레이션 및 시드도 작동하고 있습니다.

예상:

[...]
 columnType: 3,
    flags: 4097,
    decimals: 0
  }
]

[Done] exited with code=0 in 0.305 seconds

받은 항목:

[...]
 columnType: 3,
    flags: 4097,
    decimals: 0
  }
]

[Done] exited with code=null in 18.594 seconds

OBS: exited after aborting process, also this query shouldn't take 18s
and it isn't taking that long.
It does return what I expect, but the client holds the connection.
So, my program freezes after running the query. (Not happening in DBeaver)

EDIT1: knex.destroy()를 사용하면 프로그램이 잘 작동하지만, 예상되는 사용량입니까?

return knex.select('*').from('tb_dificuldades').limit(9)
        .then((results) => {
            console.log("GOT RESULTS!")
            console.log(results)
            knex.destroy()
            return results
        })

각 쿼리 후에 긴밀한 연결이 필요하지 않고 응용프로그램의 다른 부분에서 재사용하면 됩니다.연결을 닫아야 할 경우 수동으로 닫으십시오.

예를 들어 Knex를 사용하면 이러한 방식으로 작업을 수행할 수 있습니다.

knex.destroy();

문서화

언급URL : https://stackoverflow.com/questions/64260247/mysql-returns-query-but-the-connection-does-not-close

반응형