Nikdy nevíš, kdy to přijde
Zobrazit menu   MENU

10. Ukládání dat do MongoDB

V dnešním článku si předvedeme napojení MongoDB v našem Node.js kódu z minulých dílů tutoriálu. Prozatím jsme používali pouze pole uložené přímo ve zdrojovém kódu. To samozřejmě v reálných aplikacích není dostačující. V tuto chvíli byste na svém počítači měli mít nainstalovaný databázový systém MongoDB a také program Compass sloužící k procházení a manipulaci s databázemi. Pokud nemáte, návod naleznete v předchozím díle.

Balíček Mongoose

K práci s databází budeme využívat opět specializovaný balíček. Nese název Mongoose a velice nám usnadní práci. Balíček nainstalujeme přes příkazový řádek nalistovaný v našem projektu:
npm install mongoose


Na začátku našeho kódu načteme balíček do proměnné mongoose.
var mongoose = require('mongoose');


Poté vytvoříme spojení s lokální databází na našem počítači, kterou jsme si pojmenovali books.

mongoose.connect('mongodb://127.0.0.1/books', { useNewUrlParser: true });
var db = mongoose.connection;

db.on('error', function() {
console.log("Nelze se pripojit k MongoDB");
});


db.once('open', function() {
console.log("Pripojeno k MongoDB");
});


Pokud se při připojení vyskytl nějaký problém, je zachycen a info vypsáno do konzole. Taktéž v kladném případě je vypsáno potvrzení. Pokud ve své konzoli vidíte po spuštění index.js kladnou zprávu, připojení je funkční a můžeme přistoupit k úpravě prvního endpointu. Půjde o vytváření nové knihy. Proč právě vytváření? Protože potřebujeme nejdříve vložit nějaká data, abychom mohli následně využívat další endpointy pro získávání, úpravy či mazání.


Vytváření nového záznamu

Pro všechny objekty, se kterými budeme v rámci MongoDB pracovat, si musíme nejdříve vytvořit schéma. Nadefinovat jejich atributy, jejich datové typy či případná omezení hodnot. My zatím využíváme jediný typ objektu - Book. Jako další si do našeho kódu definujeme jeho schéma:

var book_schema = new mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
name: { type: String, required: true},
author: { type: String, required: true},
isbn: { type: String, required: true},
});

var Book = mongoose.model('Book', book_schema);


Schéma obsahuje tři naše původní atributy name, author a isbn, které jsou všechny typu String a jsou povinné. Poslední atribut nese název _id, které je typu mongoose.Schema.Types.ObjectId. Jde o standardní název a typ pro primární klíče v MongoDB. Pomocí metody na posledním řádku pak z tohoto schématu vytvoříme model. Přes proměnnou Book budeme přistupovat k této kolekci v naší databázi. Nyní se můžeme pustit do přepsání našeho endpointu pro vytváření nového záznamu. Upravený kód bude vypadat takto:

app.post('/api/books', (request, response) => {
if (!request.is('json')) {
response.status(415).send('Chybny pozadavek');
return;
}

if (!is_book_valid(request.body)) {
response.status(400).send('Chybna data v pozadavku');
return;
}

var book = new Book();

book._id = new mongoose.Types.ObjectId();
book.name = request.body.name;
book.author = request.body.author;
book.isbn = request.body.isbn;
book.save(function(err) {
if (err) {
throw err;
}
});

response.send(book);
});


První část metody, kde probíhá ověření, zůstává beze změny. Po nutných kontrolách vytvoříme nový objekt typu Book, který poté naplníme údaji ze zaslaného requestu. Jedinou výjímkou je nastavení hodnoty _id. Tu naplníme novým objektem typu mongoose.Types.ObjectId();, který sám přidělí vhodné a unikátní ID pro tento objekt v rámci dané kolekce.

Jen pro zajímavost, takové ID vypadá zcela jinak než jsme zvyklí například z MySQL, kde jde o celá čísla začínající jedničkou. V podaní MongoDB má takovýto tvar: 29b37806beefa2028819a21e. V závěru metoda pouze kontroluje správnost uložení a případně vrácí error. Pokud je vše v pořádku, vrací objekt uložené knihy.

Nyní můžete vyzkoušet v postmanovi poslat nový request. Využít můžete některý z uložených v historii, rozhraní se nijak nezměnilo. Po odeslání a kladném potvrzení (vrací se objekt vkládané knihy) si můžete otevřít Compass a aktualizovat data. Měli byste v něm vidět novou kolekci a v ní první dokument.



Navkládat si můžete více knih s různými údaji. Budou se nám hodit v dalším díle, kde budeme přepracovávat i další metody našeho API.



Další díly tutoriálu

9. Instalace MongoDB a Compass
10. Ukládání dat do MongoDB
11. Výběr, aktualizace a mazání dat