Node.js mikrostoritve: izdelava primera mikrostoritve z Express in MongoDB

V tem članku bomo nadgradili preprosto “Hello World” aplikacijo v pravo mikrostoritev. Predpostavimo, da želimo ustvariti mikrostoritev, ki bo upravljala seznam opravil. Vsako opravilo v seznamu naj bo sestavljeno iz imena in opisa. Naša mikrostoritev bo omogočala ustvarjanje, branje, posodabljanje in brisanje opravil. Teoretični del, strukturo in načrtovanje mikrostoritve si lahko preberete v članku: Gradnja mikrostoritev z Node.js: struktura mikrostoritev in izzivi pri razvoju

Kreacija aplikacije oz. mikrostoritve

Najprej ustvarimo nov projekt z imenom “task-service”. Odpremo terminal in se pomaknemo v mapo, kjer bomo shranili naš projekt. Nato v terminalu vnesemo:

mkdir task-service
cd task-service
npm init -y

To bo ustvarilo novo mapo z imenom “task-service” in inicializiralo nov projekt. Datoteka “package.json” bo samodejno ustvarjena.

Nato namestimo Express in ostale potrebne pakete. V terminalu vnesemo:

npm install express body-parser mongoose --save

Express bo uporabljen za ustvarjanje našega API-ja, body-parser za obdelavo vhodnih podatkov in mongoose za povezavo z MongoDB podatkovno bazo.

V mapi “task-service” ustvarimo novo mapo “src”, v kateri bomo shranili vse datoteke, povezane z našo mikrostoritvijo. V tej mapi ustvarimo datoteko “index.js” in vnesemo naslednjo kodo:

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const app = express();
const port = 3000;

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

mongoose.connect('mongodb://localhost/taskDB', { useNewUrlParser: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
  console.log('Successfully connected to the database');
});

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Server is running on port: ${port}`);
});

Ta koda nastavi naš API, priključi Express, body-parser in mongoose, ter poveže z MongoDB podatkovno bazo. Prav tako definira osnovno pot “/”, ki bo vrnila niz “Hello World!”.

Model in shema za podatkovno bazo mikrostoritve

Nato ustvarimo datoteko “task.js” v mapi “src/models”. Ta datoteka bo definirala shemo opravil, ki jo bomo shranili v našo podatkovno bazo. Datoteka vsebuje naslednjo kodo:

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const app = express();
const port = 3000;

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

mongoose.connect('mongodb://localhost/taskDB', { useNewUrlParser: true });
const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', () => {
  console.log('Successfully connected to the database');
});

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`Server is running on port: ${port}`);
});

Ta koda definira shemo “taskSchema”, ki vsebuje dva atributa: ime opravila in opis opravila.

Ta datoteka predstavlja krmilnik (controller) za upravljanje nalog. V njej so definirane funkcije, ki se izvajajo ob klicu določenih URL-jev. Na primer, ko uporabnik pošlje zahtevek za prikaz seznama nalog, se sproži funkcija getTasks. Podobno se pri ustvarjanju nove naloge uporabi funkcija createTask, pri urejanju naloge pa updateTask.

Za vsako funkcijo je treba določiti, kako bo obdelala prejete podatke in kakšen odziv bo vrnjen. V primeru funkcije getTasks se iz baze podatkov preberejo vse naloge in vrnejo kot odziv na zahtevek. Pri funkciji createTask se prejete podatke validira, nato se nova naloga shrani v bazo in se vrne uspešen odziv s podatki o ustvarjeni nalogi.

Pomembno je, da se vsa komunikacija z bazo podatkov izvaja prek vmesnika, ki je ločen od krmilnika. Na ta način je koda bolj pregledna in se lažje spreminja. Zato je v datoteki tasks.js uporabljena metoda TaskService, ki vsebuje funkcije za upravljanje z bazami podatkov.

Kontroller in logične operacije mikrostoritve

Poleg tega je v datoteki tasks.js definiran tudi router, ki določa, kateri URL-ji se uporabijo za klice funkcij v krmilniku. Na primer, če uporabnik pošlje zahtevek na naslov /api/tasks, se sproži funkcija getTasks.

Vsebina datoteke tasks.js bi lahko izgledala nekako takole:

const express = require('express');
const TaskService = require('../services/taskService');

const router = express.Router();
const taskService = new TaskService();

router.get('/', async (req, res) => {
  try {
    const tasks = await taskService.getAllTasks();
    res.json(tasks);
  } catch (err) {
    res.status(500).send(err.message);
  }
});

router.post('/', async (req, res) => {
  try {
    const newTask = await taskService.createTask(req.body);
    res.json(newTask);
  } catch (err) {
    res.status(500).send(err.message);
  }
});

router.put('/:id', async (req, res) => {
  try {
    const updatedTask = await taskService.updateTask(req.params.id, req.body);
    res.json(updatedTask);
  } catch (err) {
    res.status(500).send(err.message);
  }
});

module.exports = router;

V tem primeru se uporablja TaskService, ki vsebuje funkcije za delo z bazo podatkov. V datoteki so definirani trije URL-ji, ki uporabljajo tri različne funkcije za upravljanje z nalogami: getAll, create in update.

Funkcija getAll vrne seznam vseh nalog, ki so trenutno v bazi podatkov. To storimo tako, da v TaskService kličemo metodo getAll, ki uporabi funkcijo find iz mongoose, da najde vse naloge v bazi podatkov. Rezultat se vrne v odgovoru na zahtevo kot JSON.

Funkcija create ustvari novo nalogo v bazi podatkov. V tej funkciji preberemo podatke, ki so poslani v telesu zahteve, in jih uporabimo za ustvarjanje nove naloge v bazi podatkov. Uporabljamo funkcijo create iz TaskService, ki ustvari novo nalogo v bazi podatkov s pomočjo metode save iz mongoose. Rezultat se vrne v odgovoru na zahtevo kot JSON.

Funkcija update posodobi obstoječo nalogo v bazi podatkov. V tej funkciji preberemo podatke, ki so poslani v telesu zahteve, in jih uporabimo za posodabljanje obstoječe naloge v bazi podatkov. Uporabljamo funkcijo update iz TaskService, ki posodobi obstoječo nalogo v bazi podatkov s pomočjo metode findByIdAndUpdate iz mongoose. Rezultat se vrne v odgovoru na zahtevo kot JSON.

To so osnovne funkcije, ki jih potrebujemo za upravljanje z nalogami v tej mikrostoritvi. Z uporabo teh funkcij lahko ustvarimo enostavno REST API, ki ga lahko uporabimo za dostop do naših podatkov. Ta mikrostoritev bi lahko bila del večje aplikacije ali pa bi jo lahko uporabljali kot samostojno storitev, odvisno od naših potreb.

Povdariti je treba, da je to le osnovni primer uporabe mikrostoritev z uporabo Node.js, Express, MongoDB in RabbitMQ. Obstaja veliko različnih načinov, kako lahko uporabimo te tehnologije, da ustvarimo robustne in skalabilne mikrostoritve. Vendar pa nam ta primer ponuja dobro izhodišče za razumevanje osnovnih konceptov in orodij, ki jih potrebujemo za ustvarjanje mikrostoritev v Node.js.

Kako naprej od prve mikrostoritve do delujoče aplikacije?

Ko imamo našo mikrostoritev pripravljeno in testirano, lahko nadaljujemo z gradnjo ostalih mikrostoritev, ki bodo tvorile našo spletno trgovino. Te mikrostoritve lahko vključujejo:

  1. Mikrostoritev za upravljanje naročil.
  2. Mikrostoritev za upravljanje inventarja.
  3. Mikrostoritev za upravljanje dostave.

Vsaka od teh storitev bo imela svojo bazo podatkov in vmesnik za komunikacijo z drugimi storitvami. Za to lahko uporabimo RabbitMQ, ki je odprtokodna programska oprema za sporočanje znotraj aplikacij.

Poleg tega lahko uporabimo tudi tehnologije, kot so Angular, React in VueJS za razvoj stranskega vmesnika za našo spletno trgovino. Ti okviri omogočajo razvoj hitrih in interaktivnih uporabniških vmesnikov, ki bodo našim strankam omogočili lažji dostop do izdelkov in storitev.

Z uporabo mikrostoritev lahko izboljšamo skalabilnost in vzdrževanje našega sistema, saj imamo vsako storitev ločeno in neodvisno druga od druge. To nam omogoča, da enostavno posodabljamo in nadgrajujemo posamezne storitve brez da bi motili celoten sistem.

Zaključek

V zaključku, uporaba mikrostoritev je ena najboljših praks pri razvoju velikih aplikacij, kot je spletna trgovina. Node.js je odlično orodje za razvoj mikrostoritev zaradi svoje učinkovitosti, prilagodljivosti in zmogljivosti. Z uporabo tehnologij, kot so Express.js, MongoDB, RabbitMQ lahko gradimo robustne in skalabilne mikrostoritve, ki bodo zadovoljile potrebe naše spletne trgovine.

Ocenite članek
Deli:
avatar avtorja
Grega Programer spletnih strani
Grega Rednak - inovativni spletni programer in podjetnik, ki s strankami zgradi osebni odnos in nudi dobre spletne rešitve (od izdelave spletnih strani, trgovin do SEO optimzacije in namensko sprogramiranih rešitev).

Dodaj komentar

Scroll to Top