@nurzhannogerbek

Как правильно организовать запрос к базе данных MySQL из Node.JS приложения?

Здравствуйте, товарищи! Помогите пожалуйста разобраться. Пытаюсь правильно организовать запрос к MySQL базе данных из Node.JS приложения.

В проекте Node.JS при первом запуске сервера вызываю модуль, который создает пул для базы данных MySQL. Выглядит этот модуль следующим образом:

const mysql = require('mysql');
const configuration = require('../config/mysql_database');

async function initialization() {
    await mysql.createPool(configuration);
}

module.exports.initialization = initialization;


Далее в проекте при обращении к определенному url адресу запускаю контроллер, который вызывает функцию для выполнения нативного SQL запроса. Выглядит она следующим образом:

mysql_database.js:

function executeSQLStatement(query, binds = []) {
    return new Promise(async (resolve, reject) => {
        let connection;
        try {
            const  result = await mysql.query(query, binds, function (error, results, fields) {
                if (error) throw error;
            });
            resolve(result);
        } catch (error) {
            reject(error);
        } finally {
            if (connection) {
                try {
                    await connection.close();
                } catch (error) {
                    console.log(error);
                }
            }
        }
    });
}

module.exports.executeSQLStatement = executeSQLStatement;


Ошибка в терминале:
TypeError: mysql.query is not a function
at new Promise (<anonymous>)
500     at Object.executeSQLStatement


Из официальной документации (ссылка) видно, что при выполнении запроса, каждый раз создают пул. Насколько это правильно?
  • Вопрос задан
  • 1936 просмотров
Решения вопроса 1
EShein
@EShein
Shein
Это можно в отдельный файл вынести.
var mysql = require('mysql');
var pool  = mysql.createPool({
  connectionLimit : 10,
  host            : 'example.org',
  user            : 'bob',
  password        : 'secret',
  database        : 'my_db'
});

module.exports = pool;


А потом подключать этот модуль и пользоваться
const pool   = require('./file');
const query = 'SELECT 1 + 1 AS solution';
const result = await pool.query(query);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mak_ufo
@mak_ufo
Из официальной документации видно, что при выполнении запроса, каждый раз создают пул.


Нет! Пул создаётся единожды, из которого потом при каждом запросе берётся соединение (на то он и пул).
Функция executeSQLStatement тоже не нужна, ито это то же самое, что и connection.query('', () => {}).
Делайте всё как в ответе Евгения, и всё будет хорошо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы