Lekce 5 - Úvod do MongoDB
V minulé lekci, Kompletní RESTful API v Node.js, jsme si za pomoci Expressu naimplementovali kompletní RESTful API.
V dnešním Node.js tutoriálu si nainstalujeme databázi. Dosud jsme data pouze ukládali do pole, takže jsme o ně při každém restartu aplikace přišli. Díky MongoDB budou naše filmová data uložena trvale. Nakonec si vysvětlíme tzv. přísliby - promises.
Výběr databáze
Na výběr máme mnoho dostupných databází. Na jedné straně máme relační databáze (MySQL, MS-SQL a podobně), které používají tabulky a na data se dotazujeme pomocí SQL příkazů. Pro projekty v Node.js a Express se ale častěji používají tzv. ne-relační, nebo také dokumentově-orientované databáze. Nejznámější z nich je MongoDB.
MongoDB
MongoDB patří mezi NoSQL databáze. Je objektově orientovaná, jednoduchá, dynamická a dobře škálovatelná. Místo tabulek (jako v relační databázi) používá kolekce a místo řádků a sloupců pak dokumenty a pole. Data se ukládají ve formátu JSON, což se nám hodí, protože naše data v JSON formátu už máme a nebudeme je muset nikam převádět.
Přesněji se na disku ukládají jako BSON, což je binární JSON.
Data nemají předem daný formát (říká se, že MongoDB je schema-less). Objekty se mohou do sebe vnořovat, takže to, co bychom museli v relační databázi řešit několika propojenými tabulkami, se v MongoDB dá vložit do jednoho dokumentu. Výhodou je vyšší rychlost a variabilita dat, které nemusí "pasovat" do předem daných tabulek. Nevýhodou je potom vyšší míra anarchie v uložených datech.
Instalace MongoDB
Nejprve nainstalujeme MongoDB Community Server a k němu poté i aplikaci MongoDB Compass, která slouží ke správě databáze. Na stránce MongoDB klikneme v menu na Products > Community Server. Dále vybereme verzi 6 a svůj operační systém. Balíček zvolíme MSI a stáhneme si instalátor tlačítkem Download:
Pozor, dodržuj přesné verze komponent! Pokročilé projekty jako tento jsou složené z komponent. Možná by tě napadlo použít nejnovější verzi nějaké komponenty, co zrovna včera vyšla. Projekt ti pak ale bez odborné úpravy pravděpodobně nebude fungovat! U verzí komponent neplatí jako např. u aktualizace Windows, že chceme každý den používat tu nejnovější. Neustálé aktualizace všeho by totiž vyžadovaly každodenní a komplexní změny kódu projektu a reálně se tak neprovádějí. Ze stejného důvodu i my aktualizujeme kurzy v pravidelných intervalech a nové verze k sobě pak sladíme tak, aby vše fungovalo.
Instalátor spustíme. Až se nás zeptá na typ instalace, vybereme kompletní. Ponecháme předvolby předvyplněné instalátorem a potvrdíme. V průběhu instalace se instalátor rovněž zeptá, zda má nainstalovat i MongoDB Compass. Nabídku potvrdíme a pokračujeme dále v instalaci.
V ojedinělých případech se nepodaří nainstalovat MongoDB Compass společně s databází. Pokud se tak stane, přejdeme zpět na stránku MongoDB a v menu klikneme na Products > Tools > Compass. Stáhneme instalátor a provedeme instalaci dodatečně.
MongoDB se nainstaluje jako service (služba). To znamená, že ji nemusíme spouštět manuálně. Manuálnímu spuštění může běžící služba naopak bránit.
Manuální spuštění MongoDB
Může se stát, že se MongoDB samo nespustí a musíme ho spustit
manuálně. V příkazovém řádku se příkazem cd
přesuňme do
složky C:\Program Files\MongoDB\Server\6.0\bin
(verzi upravíme
podle aktuální verze instalace) a spusťme MongoDB příkazem
mongod
:
cd C:\Program Files\MongoDB\Server\6.0\bin mongod
Pro jednodušší používání se vyplatí přidat výše uvedenou cestu do
proměnné PATH
v proměnných prostředí. Postup se liší podle
verze Windows. Ve Win 10 klikneme na Ovládací panely > Systém
a zabezpečení > Systém > Upřesnit nastavení
systému. Dále přejdeme na proměnné prostředí, najdeme proměnnou
PATH
a klikneme na Upravit. Poté klikneme na
Nový a přidáme cestu k MongoDB. Pak už jen třikrát klikneme na
OK čímž změnu potvrdíme. Nyní půjde příkaz mongod
spustit odkudkoliv
Pokud máme vše nastavené správně a příkaz stále nefunguje, příkazovou řádku ukončíme a spustíme znovu.
Nyní nám vše běží a v příkazovém řádku vidíme, že MongoDB čeká
na portu 27017
.
Alternativní řešení
Pokud nechceme, nemusíme MongoDB stahovat vůbec. K dispozici je i takzvaná DBaaS (databáze jako služba, Database-as-a-Service), kdy můžeme využít online platformu, která nám nabídne hostovanou databázi.
Přímo se nabízí cloudová služba Atlas, kde si můžeme hostovat své databáze zadarmo.
Vyzkoušení v MongoDB Compass
Po instalaci se spustí aplikace Compass, případně ji můžete spustit i
sami. V poli URI by se měl nacházet řetězec
mongodb://localhost:27017
pro připojení k databázi, případně
jej tam doplňte. Klikneme na tlačítko Connect:
Po připojení uvidíme v kartě Databases seznam s výchozími databázemi:
Založení projektu
Založíme si nový adresář mongodb-movie-api/
a otevřeme v
něm nové okno příkazové řádky. Budeme používat balíčkovací systém
npm pro jehož inicializaci zadáme do příkazové řádky:
npm init --yes
Následně nainstalujeme balíček mongoose
. Díky
mongoose
budeme schopni s Mongem pracovat přes jednoduché
API:
npm install mongoose@~6.6.0
Připojení k MongoDB
Teď už se pojďme připojit k databázi. V projektu si vytvoříme nový
index.js
a do něj vložíme následující kód:
const mongoose = require('mongoose'); mongoose.connect('mongodb://127.0.0.1:27017/moviesdb', { useNewUrlParser: true }) .then(() => console.log('Connected to MongoDB!')) .catch(error => console.error('Could not connect to MongoDB... ', error));
Nejdříve načteme modul mongoose
a ve formě objektu ho
uložíme do konstanty. Tento objekt má na sobě metodu connect()
,
která nám umožní připojit se k databázi. Jako první parametr bere
připojovací řetězec.
V reálné aplikaci se bude připojovací řetězec načítat z konfiguračního souboru.
My si ho pro zjednodušení nakódujeme staticky. Bude to tedy
mongodb://127.0.0.1:27017/moviesdb
, kde moviesdb
je
jméno databáze.
To, že naše databáze zatím neexistuje, vůbec nevadí. MongoDB ji při prvním připojení vytvoří.
Druhý parametr je pouze kvůli konfiguraci pro novější verze MongoDB
(>=3.1.0). Protože metoda connect()
vrací tzv. příslib
(promise), můžeme na něm zavolat then()
při úspěšném
zavolání a catch()
při chybě.
Nyní aplikaci spustíme. Pro spuštění aplikace zadáme do příkazové řádky:
node index.js
V příkazové řádce se poté ukáže zpráva o úspěšném připojení:
Windows PowerShell
Connected to MongoDB!
Přísliby (promises)
Pro asynchronní práci se v JavaScriptu často používají takzvané
přísliby (promises), se kterými jsme se již setkali v lekci
Promisy v JavaScriptu.
Promise je něco jako příslib o budoucí hodnotě. A zrovna připojení k
databázi je asynchronní. Připojit se chvíli trvá, takže výsledek nevíme
hned a musíme na něj počkat - ale díky asynchronicitě může další kód
během čekání normálně běžet. Promise je jednou z možností, jak si s
tím poradit. Další by byla třeba syntaxe async/await
.
Promise může být ve třech stavech:
- čekající na výsledek (pending),
- splněný (fulfilled) a
- odmítnutý (rejected).
Dále má na sobě then()
metodu, jejímž parametrem je funkce
- ta se zavolá v případě úspěšného splnění. A také metodu
catch()
, jejíž parametr (opět funkce) se zavolá v případě
odmítnutí, tedy chyby. To je pro dnešní lekci vše
Příště, v lekci První kroky v MongoDB, si ukážeme, jak vytvářet MongoDB schémata a kompilovat je do modelů. Zjistíme také, jak vytvářet nové dokumenty v kolekci a jak vrátit všechny dokumenty z kolekce.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 173x (2.46 kB)
Aplikace je včetně zdrojových kódů v jazyce JavaScript