Javascript работа с базами данных

How to Connect to Database in Javascript (Simple Examples)

Welcome to a tutorial on how to connect to a database in Javascript. Need to connect to the database in Javascript to fetch or save some data?

It is possible to connect to a database with modern Javascript, but it is a different process depending on where you are applying it to:

  • On web pages (client-side Javascript), the usual practice is to make an AJAX call to a server-side script that will connect to the database.
  • In NodeJS (server-side Javascript), we can easily connect to a database using the respective database module.

So just how exactly do we connect to the database in the above cases? Let us walk through some examples and alternatives – Read on to find out!

TLDR – QUICK SLIDES

How To Connect To Database In Javascript

TABLE OF CONTENTS

DATABASE CONNECTION VIA AJAX (CLIENT-SIDE JS)

If you are working with a webpage, it is called “client-side Javascript” because it runs on the user’s device. In this case, we make an intermediary AJAX call to a server-side script that will connect to the database. Take note, this is based on PHP MySQL, I will leave more links below for other languages and databases.

STEP 1) DUMMY DATABASE TABLE

CREATE TABLE `users` ( `user_id` bigint(20) NOT NULL, `user_name` varchar(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ALTER TABLE `users` ADD PRIMARY KEY (`user_id`), ADD KEY `user_name` (`user_name`); ALTER TABLE `users` MODIFY `user_id` bigint(20) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; INSERT INTO `users` (`user_id`, `user_name`) VALUES (1, 'Joe Doe'), (2, 'Jon Doe'), (3, 'Joy Doe');

For the purpose of demonstration, we will use this dummy user table – Just 2 fields here, the user ID and name.

STEP 2) SERVER-SIDE SCRIPT (THAT CONNECTS TO DATABASE)

 PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); // (C) GET USERS $stmt = $pdo->prepare("SELECT * FROM `users`"); $stmt->execute(); $users = $stmt->fetchAll(); foreach ($users as $u) < printf("
[%u] %s
", $u['user_id'], $u['user_name']); > // (D) CLOSE DATABASE CONNECTION $pdo = null; $stmt = null;

Next, this server-side script will connect to the database. It simply gets all the users from the database and outputs them in HTML.

STEP 3) HTML & JAVASCRIPT (CALL SERVER-SIDE SCRIPT)

    

Finally, all that’s left is to use Javascript on the webpage to make an AJAX fetch call to the server-side script.

P.S. AJAX stands for Asynchronous Javascript and XML. In simple terms, “load data without refreshing the entire page”.

WHY THE ROUNDABOUT METHOD?

So why this “dumb roundabout” way of using Javascript to call a server-side script, then to the database? Isn’t it simpler for Javascript to just directly connect to the database? Well, that is possible, but the key consideration here is security. For Javascript to make a direct connection to the database:

  • The database will have to be directly exposed to the Internet to accept connections.
  • The database user and password have to be “hardcoded” in Javascript.
  • Being client-side in this case, the source code and user/password are fully visible to all users.
Читайте также:  Php удалить определенную строку

This is why keeping database connections behind the server-side script makes more sense. Users don’t get to see the user/password, and cannot directly mess with the database.

NODEJS CONNECT TO DATABASE (SERVER-SIDE JS)

Working with server-side NodeJS? Here is how to connect to a database in NodeJS. Take note again, this example is using MySQL, but NodeJS also supports other databases such as MSSQL and MongoDB.

STEP 1) INSTALL THE DATABASE MODULE

First, navigate to your project folder in the command line, and install the database module:

D:\YOUR\PROJECT> npm install mysql

STEP 2) THE SCRIPT

// (A) LOAD DB MODULE const mysql = require("mysql"); // (B) CREATE CONNECTION - CHANGE TO YOUR OWN ! const db = mysql.createConnection(< host: "localhost", user: "root", password: "", database: "test" >); db.connect(err => < if (err) < throw err; >console.log("DB connection OK"); >); // (C) QUERY db.query("SELECT * FROM `users`", (err, results) => < if (err) < throw err; >console.log(results); >);

Yep, it’s that simple – Just load the database module and make a connection. But take note that this is based on MySQL again, install and load your own if you are using something else.

DOWNLOAD & NOTES

Here is the download link to the example code, so you don’t have to copy-paste everything.

SUPPORT

600+ free tutorials & projects on Code Boxx and still growing. I insist on not turning Code Boxx into a «paid scripts and courses» business, so every little bit of support helps.

EXAMPLE CODE DOWNLOAD

Click here for the source code on GitHub gist, just click on “download zip” or do a git clone. I have released it under the MIT license, so feel free to build on top of it or use it in your own project.

That’s all for this tutorial, and here is a small section on some extras and links that may be useful to you.

ALTERNATIVE) LOCAL STORAGE

// (A) DATA OBJECT var user = < name : "Jon Doe", email : "jon@doe.com" >; // (B) STORE IN LOCAL STORAGE // note: json encode localStorage.setItem("User", JSON.stringify(user)); // (C) RETRIEVE // note: json decode user = localStorage.getItem("User"); user = JSON.parse(user); console.log(user);
  • localStorage.setItem(KEY, VALUE) – Saves data into local storage.
  • localStorage.getItem(KEY) – Retrieves data from the local storage.
  • localStorage.removeItem(KEY) – Removes data from the local storage.
  • localStorage.clear() – Remove everything.

INFOGRAPHIC CHEAT SHEET

THE END

Thank you for reading, and we have come to the end of this guide. I hope that it has helped you to better understand, and if you want to share anything with this guide, please feel free to comment below. Good luck and happy coding!

Читайте также:  Opening and reading file in php

Источник

Как упростить работу с базами данных в Node.js с помощью Objection.js

Objection.js — минималистичная ORM-библиотека для Node.js, которая сильно упрощает взаимодействие с базами данных и не перегружена дополнительными функциями, как sequalize или typeORM. Разбираемся, в чем ее специфика и как строить запросы с ее помощью.

Это адаптированный перевод статьи A Step Towards Simplified Querying in NodeJS из блога компании Velotio Technologies. Повествование ведется от лица автора оригинала.

Недавно я увидел на StackOverflow историю разработчика, который столкнулся с проблемой использования ORM. Этот кейс натолкнул меня на мысль написать статью о альтернативе sequelize — Objection.js, библиотеке, которая решает множество проблем ORM.

ORM или метод реляционного сопоставления объектов — решениe для сопоставления объектов в программе с таблицами базы данных. Он позволяет разработчикам взаимодействовать с объектами вместо того, чтобы писать запросы к базе данных.

ORM позволяет строить динамические запросы с помощью Query Builder и абстрагироваться от особенностей конкретной базы данных. Решения обычно поддерживают Postgres, MySQL, SQLite и другие базы данных.

Вопрос на StackOverflow касался преобразования приведенного ниже запроса в sequelize-запрос. Стоит отметить, что его писал начинающий разработчик:

Решение на sequelize выглядит так:

Учитывая простоту запроса, решение кажется сложным, и чем больше в нем новых отношений, тем оно сложнее. Такие простые запросы в sequelize описаны недостаточно подробно.

Для сравнения разберем, как решение задачи будет выглядеть на Objection.js:

Буду честен — я сам пользуюсь Objection.js, что не делает его лучшим ORM для NodeJS. Каждая библиотека имеет свою специфику, а некоторые разработчики вообще выступают против любых ORM и предлагают вручную писать SQL-запросы. Отчасти они правы. Если ваше приложение достаточно маленькое, и вы можете написать несколько функций-хелперов для выполнения запросов, то используйте обычный SQL вместо ORM.

ORM нужна, когда в приложении много таблиц с большим количеством связей, которые нужно определить, и выполнить несколько объединенных запросов.

Список самых упоминаемых ORM для NodeJS выглядит так:

Почему я выбрал Objection.js

  1. В основе решения — мощный конструктор SQL-запросов KNEX.JS.
  2. Библиотека позволяет выполнять запросы через функции async/await.
  3. Позволяет добавить валидацию с помощью JSON схемы.
  4. Позволяет создавать модели для таблиц с использованием синтаксиса ES6/ES7 и определять связи между ними.
  5. Objection.js автоматически строит связи между объектами и самостоятельно определяет, какие данные нужно сохранить, а какие — обновить (за это отвечают функции upsert и insert ).

У Objection.js и KNEX.JS очень понятная и обширная документация, в которой легко найти инструкции и примеры использования. В официальном репозитории библиотеки на GitHub есть множество примеров использования библиотеки и подробная инструкция по ее установке и настройке.

Создание и управление схемой базы данных

Миграция — один из подходов к внесению изменений в базу данных, в этой статье сосредоточимся на нем. В Objection.js используются механизмы миграции KNEX.JS. Поскольку речь идет об ORM, определять таблицы и столбцы можно не с помощью SQL, а непосредственно написанием кода на JavaScript. Для создания новой миграции выполним команду KNEX CLI:

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

Читайте также:  Скрипт бота телеграмм php

Функция exports.up определяет команды, выполнение которых внесет нужны изменения в базу данных. Например, речь может идти о создании таблиц базы данных, добавлении или удалении столбца из таблицы, изменении индексов и других действиях.

Вторая функция, exports.down , выполняет противоположные первой действия: например, когда exports.up создает таблицу, exports.down удаляет ее. Она нужна для того, чтобы быстро откатить изменения, сделанные миграцией, если это потребуется.

В случае ниже в функции up создается таблица persons с необходимыми столбцами и индексами, а в функции down таблица удаляется, если она существует:

Запустить процесс миграции можно следующим образом:

Также можно передать флаг — env или установить NODE_ENV , чтобы выбрать альтернативную среду:

Модели

Модели базы данных — абстракции вокруг таблиц базы данных, которые помогают инкапсулировать бизнес-логику внутри них. В Objection.js модели можно создавать c помощью классов ES.

Прежде чем продолжить, уточним, что модели в Objection.js не создают таблиц в базах данных, а предназначены для добавления валидаций и создания связей между моделями. Например:

В этом коде есть три статистических геттера. Первый, tableName , возвращает имя таблицы.

Второй, jsonSchema , определяет параметры валидации каждого поля. В нем можно указать необходимые свойства: например, тип поля (число, строку, объект и тд).

Третий, relationMappings , определяет связь выбранной модели с другими моделями. В данном случае ключ внешнего объекта pets — ссылка на связанный класс. Свойство join определяет, как модели связаны друг с другом, а from и to объекта join определяют поля базы данных, с помощью которых связаны модели. Класс ModelClass является классом связанной модели.

Таким образом, класс Person имеет связь HasManyRelation (один ко многим) с моделью Animal . Модели связаны через столбцы persons.id и animals.OwneId . В результате мы видим, что у одного человека может быть несколько домашних животных.

Запросы

Начнем с простого запроса SELECT:

Простой SELECT будет выглядеть на Objection.js следующим образом.:

Запрос выше затрагивал все поля в таблице, а так можно реализовать запрос с выбором одного поля:

Из примеров выше видно, насколько запросы в Objection.js похожи на SQL-запросы. Преобразовать одни запросы в другие довольно просто, что нетипично для ORM.

Запросы создания и вставки

Другой способ его выполнения выглядит так:

Запросы удаления

Другой способ его выполнения выглядит так:

Запросы по отношениям

Предположим, мы хотим получить данные обо всех домашних животных пользователя по имени Бен:

Теперь предположим, что вы хотите добавить информацию о пользователе со всеми его животными. Для этого можно использовать запрос с помощью графа:

Доступные плагины

objection-password — плагин, который позволяет автоматически хэшировать пароли для модели Objection.js. Это легкий способ защитить пароли и другие конфиденциальные данные.

objection-graphql — автоматически генерирует GraphQL API для модели Objection.js.

Заключение

В заключение стоит отметить, что если передо мной встанет выбор, какую ORM использовать, я выберу Objection.js. В первую очередь потому, что запросы в ней выполняются проще, чем в sequalize.

В целом Objection.js не похоже на другие ORM. По сути, это просто оболочка поверх конструктора запросов KNEX.js, поэтому лучше всего воспринимать решение как конструктор запросов с дополнительными функциями.

Источник

Оцените статью