Краткое руководство. Использование Node.js для подключения и запроса данных в База данных Azure для MySQL

Внимание

Эта статья ссылается на CentOS, дистрибутив Linux, который приближается к состоянию конца жизни (EOL). Пожалуйста, рассмотрите возможность использования и планирования соответствующим образом. Дополнительные сведения см. в руководстве centOS End Of Life.

ОБЛАСТЬ ПРИМЕНЕНИЯ: База данных Azure для MySQL — отдельный сервер

Внимание

База данных Azure для MySQL один сервер находится на пути выхода на пенсию. Настоятельно рекомендуется выполнить обновление до База данных Azure для MySQL гибкого сервера. Дополнительные сведения о миграции на гибкий сервер База данных Azure для MySQL см. в статье "Что происходит с одним сервером База данных Azure для MySQL?"

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

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

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

Внимание

Убедитесь, что IP-адрес, с которого вы подключаетесь, добавлен в правила брандмауэра на сервере через портал Azure или 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. Запишите имя сервера и имя для входа администратора сервера с панели сервера Обзор. Если вы забыли свой пароль, можно также сбросить пароль с помощью этой панели. Имя сервера базы данных Azure для MySQL

Выполнение примеров кода

  1. Вставьте код JavaScript в текстовые файлы и сохраните их в папку проекта с расширением файла .js, например C:\nodejsmysql\createtable.js or /home/username/nodejsmysql/createtable.js).

  2. Замените параметры конфигурации host, user, password и database значениями, указанными при создании сервера и базы данных.

  3. Получить SSL-сертификат: скачайте сертификат, который необходим для взаимодействия с сервером базы данных Azure для MySQL по протоколу SSL из https://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem, и сохраните файл сертификата на локальном диске.

    Для Microsoft Internet Обозреватель и Microsoft Edge: после завершения скачивания переименуйте сертификат в DigiCertGlobalRootCA.crt.pem.

    Ознакомьтесь со следующими ссылками для сертификатов для серверов в национальных облаках: Azure для государственных организаций, Microsoft Azure, управляемых 21Vianet и Azure Для Германии.

  4. В параметре конфигурации ssl замените имя файла ca-cert на путь к этому локальному файлу.

  5. Откройте командную строку или оболочку Bash и перейдите в папку проекта cd nodejsmysql.

  6. Чтобы запустить приложение, введите команду Node, указав после нее имя файла, например node createtable.js.

  7. В Windows, если приложение узла не в пути переменной среды, может потребоваться использовать полный путь для запуска приложения узла, например "C:\Program Files\nodejs\node.exe" createtable.js

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

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

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

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

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_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', 154],
            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() используется для обмена данными с сервером MySQL. Метод connect() используется для подключения к серверу. Метод query() используется для выполнения SQL-запроса к базе данных MySQL. Массив результатов используется для хранения результатов запроса.

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

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_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() используется для обмена данными с сервером MySQL. Метод connect() используется для подключения к серверу. Метод query() используется для выполнения SQL-запроса к базе данных MySQL.

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

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_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 = ?', [200, '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() используется для обмена данными с сервером MySQL. Метод connect() используется для подключения к серверу. Метод query() используется для выполнения SQL-запроса к базе данных MySQL.

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

var config =
{
    host: 'mydemoserver.mysql.database.azure.com',
    user: 'myadmin@mydemoserver',
    password: 'your_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

Следующие шаги