асинхронное ожидание mysql2 / обещание и окончание соединения - PullRequest
0 голосов
/ 04 мая 2018

Попытка разработки REST API в Node.Js с использованием базы данных MySQL. Не могли бы вы помочь мне написать лучший код?

Два самых важных вопроса здесь,

1 - How we can take the createConnection logic out of userModel.js?
2 - Shall I end the connection on every API call?

Предсказанный ответ

    filename : db.js
    const mysql = require('mysql2/promise');
    module.exports = async function(){
        return await mysql.createConnection({host:'localhost', user: 'user', password:'pass', database: 'database'});
    }

and in userModel.js 
const mysql = require('db.js');

module.exports.getProfile(user_id){
   try{
        const [rows, fields] = await db.execute('SELECT * FROM `table` WHERE `user_id` = ?', [1]);
        console.log(rows);
    }catch(err){
        console.log(err);
    }

    await db.end();
}

Приведенная выше реализация кода приведет к ошибкам. Если мы попытаемся снова запустить API с помощью "{Ошибка: невозможно добавить новую команду, когда соединение находится в закрытом состоянии в PromiseConnection.execute"

Возможно, если использовать этот нижеприведенный подход, который кажется глупым, мы можем снова вызвать тот же API n без какой-либо ошибки.

Также в userModel.js есть много функций, и в этом случае мы должны создавать и завершать соединение с каждым методом API.

userModel.js

const mysql = require('mysql2/promise');
const db = await mysql.createConnection({host:'localhost', user: 'user', password:'pass', database: 'database'});

    try{
        const [rows, fields] = await db.execute('SELECT * FROM `table` WHERE `user_id` = ?', [1]);
        console.log(rows);
    }catch(err){
        console.log(err);
    }

    await db.end();

Любой совет будет полезен. С уважением,

1 Ответ

0 голосов
/ 04 мая 2018
  1. Соединение может быть установлено при запуске вашего сервера. Вы должны поместить этот код в файл, где вы запускаете сервер.

  2. Создание соединений может быть дорогостоящим и может повлиять на производительность вашего приложения. Вы должны использовать пулов соединений

С другой стороны, не стоит задавать жесткий код параметров для подключения к базе данных. Вы должны сохранить файл конфигурации, из которого эти значения могут быть прочитаны в зависимости от среды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...