Node.JS Mysql
Автор: Azer333 20.11.2017 10:34
Введение
Доброго времени суток уважаемый читатель! Мы продолжаем наше знакомство с новой технологией серверного программирования на Node.JS.
Как вы поняли сегодня мы будем говорить о том, как работать с базой данных MySQL программируя на Node.JS. Для удобного соединения с MySQL сервером есть несколько уже готовых модулей и с каждым днем их становится все больше и больше. Но мы остановимся на самом удобным модуле на мой взгляд - это node-mysql.
Модуль node-mysql — является клиентским приложения для соединения с сервером базы данных MySQL, его функционал больше похож на PHP или Perl. Ну, что же давайте переходить от слов к практике.
Подготовка
Для работы нам понадобится естественно сам MySQL сервер, скачать и установить можно по этой ссылке. После того как скачаете и установите, необходимо заранее создать новую базу и таблицу.
CREATE DATABASE `node` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; USE node; CREATE TABLE `users` ( `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 255 ) NOT NULL , `password` VARCHAR( 255 ) NOT NULL ) ENGINE = MYISAM ;
Далее нам необходимо установить сам модуль, так как в стандартной комплектации с Node.JS он не поставляется. Его установка не вызовет никакого затруднения с использованием пакетного менеджера npm.
Введите следующую команду:
npm install mysql
Теперь мы имеем все необходимое для полноценного программирования. Давайте откроем файл index.js который мы создали в прошлой статье.
Программирование
С чего же мы начнем? Ну, конечно же с прикрепления модуля mysql. Как это делается, вспоминаем из прошлой статьи, кто не вспомнил напоминаю:
var mysql = require('mysql');
Теперь к файлу index.js прикреплен модуль mysql и мы можем воспользоваться его API функциями. Первым делом нам необходимо присоединиться к MySQL серверу, для этого создаем соединение:
var client = mysql.createClient();
В переменную client мы поместили только что созданное соединение, теперь давайте его осуществим.
client.host='127.0.0.1'; client.port= '3306'; client.user='root'; client.password='12345'; client.database='node';
В первой строке мы задаем Ip-адрес MySQL сервера, к которому мы будем подключаться. Далее в строке client.port мы задаем норме порта на котором висит наш MySQL сервер, теперь проходим аутентификацию передаем в следующих двух строчках имя пользователя и пароль сервера базы данных. В последней строчке мы задаем имя базы данных к которой необходимо соединяться.
Все, после этих нескольких строк мы установили соединение, теперь давайте разберемся, как правильно посылать запросы. Для этого нам понадобится еще одна API функция модуля node-mysql, ее синтаксис выглядит следующим образом:
client.query(sql код, [params, cb])
Давайте сделаем запрос на добавлению, затем на выборку и выведем результат в терминал.
// Запрос на добавление client.query('INSERT INTO users VALUES (1, \'Admin\', \'12345\')', function(){ // Запрос на выборку client.query('SELECT * FROM users', function(error, result, fields){ // Если возникла ошибка выбрасываем исключение if (error){ throw error; } // Выводим результат console.log(fields); console.log(result); // Завершаем соединение client.end(); }); });
Комментарии комментариями, но доскональна разобраться все же стоит. Первая строчка создает новую строку в таблице users с именем пользователя «Admin» и паролем «12345». Далее мы создаем анонимную функцию в которой делаем запрос на выборку
client.query('SELECT * FROM users', function(error, result, fields){
В данном запросе мы выбрали все поля в таблице «users», затем выводим результат в созданной анонимной функцией с параметрами «error», «result» и «fields». Где «error» - является возникшей ошибкой (если конечно же она возникла), «result» - это массив объектов результата запроса и «fields» -описание полей из множества полей результата.
Далее мы делаем условие в котором говорится, что в случае ошибки необходимо делать исключение и не останавливать WEB — сервер. Строчки
console.log(fields); console.log(result);
Как вы уже поняли выводят результат в консоль и вы получаете данные о выборке. И на конец мы завершаем соединение
client.end();
Консоль — это конечно хорошо, но у новичков часто возникает ряд проблем с выводом результата на страницу. Так как они пытаются засунуть объект result и получают ошибку.
Сегодня мы обсудим как правильно выводить данные на страницу из объекта result. Как уже говорилось выше result является массивом полученного результата, а как мы помним массив состоит из ячеек и задаются они в квадратных скобках:
result[0]
Но для вывода результата этого не достаточно, необходимо указать конкретный столбец:
result[0].id
То есть полный запрос будет выглядеть следующим образом:
'ID: '+result[0].id+' Имя: '+result[0].name+' Пароль: '+ result[0].password
Но у нас в базе может быть большое количество записей давайте для этого напишем следующий код:
var sors = 'ID: '; for(var i = 0; i '; }
Здесь мы с использованием цикла for переберем все полученные данные которые находятся в массиве result и сделав конкатенацию к переменной sors, на выходе получаем переменную sors с полным списком значений. Код файла index.js будет выглядеть следующим образом:
var http = require('http'); var mysql = require('mysql'); function web(req, res) { var client = mysql.createClient(); client.host='127.0.0.1'; client.port= '3306'; client.user='root'; client.password='123'; client.database='node'; client.query('SELECT * FROM users', function(error, result, fields){ // Если возникла ошибка выбрасываем исключение if (error){ throw error; } // выводим результат var sors = ' ID: '; for(var i = 0; i '; } res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(sors); res.end(); }); // Завершаем соединение client.end(); } http.createServer(web).listen(8888); console.log('Сервер был запущен '+Date()+ ' И доступен по адресу "http://localhost:8888/" ');
Вывод
Ну, вот собственно и все что вам необходимо знать для работы с модулем node-mysql. Все остальное придет со временем, главное, чтобы присутствовал креатив и вы могли импровизировать.
На сей ноте нам пора закончить сегодняшнюю беседу, рад если вам помогла данная статья.