Поделиться через


Краткое руководство. Подключение к Базе данных Azure для MySQL (гибкий сервер) и запрос данных с помощью Node.js

В этом кратком руководстве вы подключаетесь к гибкому серверу База данных Azure для MySQL с помощью Node.js. Затем вы используете инструкции SQL для запроса, вставки, обновления и удаления данных в базе данных с платформ Mac, Linux и Windows.

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

Необходимые компоненты

В качестве отправной точки в этом кратком руководстве используются ресурсы, созданные в соответствии со следующими материалами:

Внимание

Убедитесь, что IP-адрес, из который вы подключаетесь, был добавлен правила брандмауэра сервера с помощью правил управления брандмауэром для База данных Azure для MySQL — гибкий сервер с помощью портал Azure или управления правилами брандмауэра для База данных Azure для MySQL — гибкий сервер с помощью Azure CLI

Установка Node.js и соединителя MySQL

В зависимости от используемой платформы выполните инструкции из соответствующего раздела, чтобы установить Node.js. Используйте npm, чтобы установить пакет mysql2 и его зависимости в папку проекта.

  1. Войдите на страницу скачиваемых файлов Node.js и выберите нужный установщик Windows.

  2. Создайте папку локального проекта, например nodejsmysql.

  3. Откройте командную строку и перейдите в папку проекта, например в cd c:\nodejsmysql\.

  4. Запустите средство NPM, чтобы установить библиотеку mysql2 в папку проекта.

    cd c:\nodejsmysql\
    "C:\Program Files\nodejs\npm" install mysql2
    "C:\Program Files\nodejs\npm" list
    
  5. Проверьте установку, просмотрев текст вывода npm list. Номер версии может отличаться по мере выпуска новых исправлений.

Получение сведений о подключении

Получите сведения о подключении, необходимые для подключения к экземпляру гибкого сервера База данных Azure для MySQL. Вам потребуется полное имя сервера и учетные данные для входа.

  1. Войдите на портал Azure.
  2. В меню слева на портале Azure выберите Все ресурсы и выполните поиск по имени созданного сервера (например, mydemoserver).
  3. Выберите имя сервера.
  4. Запишите имя сервера и имя для входа администратора сервера с панели сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой панели.

Запуск примеров кода

  1. Вставьте код JavaScript в текстовые файлы и сохраните их в папку проекта с расширением файла .js, например C:\nodejsmysql\createtable.js or /home/username/nodejsmysql/createtable.js).
  2. Замените hostпараметры конфигурации userpassword и database параметров конфигурации в коде значениями, указанными при создании гибкого сервера MySQL и базы данных.
  3. Получение SSL-сертификата. Чтобы использовать зашифрованные подключения с клиентскими приложениями, необходимо скачать общедоступный SSL-сертификат, который также доступен в колонке портал Azure Сети, как показано на снимке экрана ниже.

Сохраните файл сертификата в любое расположение.

  1. В параметре конфигурации ssl замените имя файла ca-cert на путь к этому локальному файлу. Это позволит приложению безопасно подключаться к базе данных по протоколу SSL.
  2. Откройте командную строку или оболочку Bash и перейдите в папку проекта cd nodejsmysql.
  3. Чтобы запустить приложение, введите команду Node, указав после нее имя файла, например node createtable.js.
  4. В Windows, если приложение узла не в пути переменной среды, может потребоваться использовать полный путь для запуска приложения узла, например "C:\Program Files\nodejs\node.exe" createtable.js

Подключение, создание таблицы и вставка данных

Используйте приведенный ниже код для подключения и загрузки данных с помощью инструкций SQL CREATE TABLE и INSERT INTO.

Метод mysql.createConnection() используется для взаимодействия с экземпляром гибкого сервера База данных Azure для MySQL. Функция connect() используется для подключения к серверу. Функция query() используется для выполнения SQL-запроса к базе данных MySQL.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
    if (err) {
        console.log("!!! Cannot connect !!! Error:");
        throw err;
    }
    else
    {
        console.log("Connection established.");
        queryDatabase();
    }
});

function queryDatabase()
{
    conn.query('DROP TABLE IF EXISTS inventory;',
        function (err, results, fields) {
            if (err) throw err;
            console.log('Dropped inventory table if existed.');
        }
    )
    conn.query('CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);',
        function (err, results, fields) {
            if (err) throw err;
            console.log('Created inventory table.');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['banana', 150],
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['orange', 250],
        function (err, results, fields) {
            if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.query('INSERT INTO inventory (name, quantity) VALUES (?, ?);', ['apple', 100],
        function (err, results, fields) {
            if (err) throw err;
            console.log('Inserted ' + results.affectedRows + ' row(s).');
        }
    )
    conn.end(function (err) {
        if (err) throw err;
        else  console.log('Done.')
    });
};

Чтение данных

Используйте указанный ниже код с инструкцией SQL SELECT для подключения и чтения данных.

Метод mysql.createConnection() используется для взаимодействия с экземпляром гибкого сервера База данных Azure для MySQL. Метод connect() используется для подключения к серверу. Метод query() используется для выполнения SQL-запроса к базе данных MySQL. Массив результатов используется для хранения результатов запроса.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            readData();
        }
    });

function readData(){
    conn.query('SELECT * FROM inventory',
        function (err, results, fields) {
            if (err) throw err;
            else console.log('Selected ' + results.length + ' row(s).');
            for (i = 0; i < results.length; i++) {
                console.log('Row: ' + JSON.stringify(results[i]));
            }
            console.log('Done.');
        })
    conn.end(
        function (err) {
            if (err) throw err;
            else  console.log('Closing connection.')
    });
};

Обновление данных

Используйте указанный ниже код с инструкцией SQL UPDATE для подключения и обновления данных.

Метод mysql.createConnection() используется для взаимодействия с экземпляром гибкого сервера База данных Azure для MySQL. Метод connect() используется для подключения к серверу. Метод query() используется для выполнения SQL-запроса к базе данных MySQL.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            updateData();
        }
    });

function updateData(){
       conn.query('UPDATE inventory SET quantity = ? WHERE name = ?', [75, 'banana'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Updated ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

Удаление данных

Используйте указанный ниже код, чтобы подключиться и удалить данные с помощью инструкции SQL DELETE.

Метод mysql.createConnection() используется для взаимодействия с экземпляром гибкого сервера База данных Azure для MySQL. Метод connect() используется для подключения к серверу. Метод query() используется для выполнения SQL-запроса к базе данных MySQL.

const mysql = require('mysql2');
const fs = require('fs');

var config =
{
    host: 'your_server_name.mysql.database.azure.com',
    user: 'your_admin_name',
    password: 'your_admin_password',
    database: 'quickstartdb',
    port: 3306,
    ssl: {ca: fs.readFileSync("your_path_to_ca_cert_file_DigiCertGlobalRootCA.crt.pem")}
};

const conn = new mysql.createConnection(config);

conn.connect(
    function (err) {
        if (err) {
            console.log("!!! Cannot connect !!! Error:");
            throw err;
        }
        else {
            console.log("Connection established.");
            deleteData();
        }
    });

function deleteData(){
       conn.query('DELETE FROM inventory WHERE name = ?', ['orange'],
            function (err, results, fields) {
                if (err) throw err;
                else console.log('Deleted ' + results.affectedRows + ' row(s).');
           })
       conn.end(
           function (err) {
                if (err) throw err;
                else  console.log('Done.')
        });
};

Очистка ресурсов

Чтобы очистить все ресурсы, используемые во время этого краткого руководства, удалите группу ресурсов с помощью следующей команды:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes