Bevezetés a NodeJ-be

nodejs
javascript
szerver
Bevezetés a NodeJ-be cover image

Bevezetés

Amikor a webről próbál tanulni

fejlesztés során általában azt tapasztaljuk, hogy a front-end lényegesen elérhetőbb, mint a háttér. Ennek számos oka van, különösen az azonnali visszacsatolás érzése, amely abból fakad, hogy a kódban egy oldal bizonyos elemét megváltoztatjuk, és észrevesszük a webhelyen alkalmazott változást. Ez a visszajelzés gyakran hasznos a kezdőknek, mert lehetővé teszi számukra, hogy módosítsák kódjukat, és tanuljanak a hibáikból. Sajnos a háttérben nem ez a helyzet: gyakran jelentős mennyiségű munka megy a környezet előzetes beállítására, és a függőségek telepítésére, amelyek ahhoz szükségesek, hogy egy egyszerű „Hello World” üzenet jelenjen meg a terminálon. Szerencsére, a nyílt forráskódú közösség folyamatosan halad a keretrendszerek fejlesztési folyamatának megkönnyítése felé, és a NodeJ-k fejlesztése jó példa erre A Javascript kódja kényelmes, és számos beépített eszközt és szolgáltatást kínál, amelyek megkülönböztetik a versenytársaktól. Ebben a cikkben a NodeJ-ket és ökoszisztémáját fogjuk megvizsgálni, gyakorlati megközelítéssel, egy teljesen működőképes projekt felépítésével.

Mit építünk?

A ToDo alkalmazások olyan kezdő projektek, akik front-end fejlesztést tanulnak. Ezért döntöttünk úgy, hogy létrehozunk egy Todo list API-t. Ez lehetővé teszi számunkra, hogy adatmegmaradást adjunk hozzá felületünkhöz, és lehetőségünk nyílik ezen adatok manipulálására (tevékenységek hozzáadásával, frissítésével, törlésével stb.).

A végleges kód itt található.

Eszközeink

Ehhez a projekthez egy egyszerűsített technológiai készletet fogunk használni. Sok olyan eszköz minimális változatának tekinthető, amelyeket a valós projektekben találhat meg, ennek oka az, hogy a magasabb szintű ötletek megegyeznek. A megvalósítás részletei és egy adott eszköz másik választása nem fontosak az induláshoz.

  • A NodeJs, mint említettük, az egyik legnépszerűbb Javascript-keretrendszer szerveroldali alkalmazások építésére.

  • Az ExpressJs egy minimális Javascript keretrendszer, amelyet a NodeJS tetején használnak. Számos beépített funkció használatával felgyorsítja a fejlesztési folyamatot. Használják a NodeJS projektek fejlesztési gyakorlatának szabványosítására is, hogy megkönnyítsék a mérnökök számára a használatát.

  • A LowDB egy egyszerű, memórián belüli adatbázis. Egyszerűsége lehetővé teszi számunkra, hogy bemutassuk, hogyan kommunikálhatunk egy adatbázissal egy NodeJs projektben anélkül, hogy fejlettebb témákkal, például telepítésekkel és konfigurációkkal foglalkoznánk.

Most, hogy azonosítottuk az összes használni kívánt eszközt, térjünk rá a billentyűzeteinkre, és kezdjük el a kódolást!

Telepítés

A Node minden platformon elérhető. Az összes telepítési útmutató megtalálható a hivatalos webhelyen. A Windows-felhasználóknak feltétlenül hozzá kell adniuk a csomópontot a környezeti változók elérési útja, hogy a parancssorban is használható legyen.

Szükségünk lesz az npm telepítésére is. Az Npm a NodeJ szabványos csomagkezelője. Lehetővé teszi számunkra, hogy kezeljük projektfüggőségeinket. A telepítési útmutató itt található.

Projekt inicializálása

Menjen a linkre, és klónozza a kezdő projektet:

Ez egy egyszerű indító tároló a projektünkhöz. Tartalmazza az összes függőséget, amelyet a projektfájl szerkezetével együtt használunk. Minden egyes elemet elmagyarázunk, miután elértük. Nyissa meg a terminált, keresse meg a projekt elérési útját, és futtassa a parancsot:

npm install

Ezzel telepíti a package.json fájlban megadott projekt összes függőségét. A package.json a Javascript/NodeJs projektek gyökerében található fájl, amely metaadatokat tartalmaz az utóbbiról, és az összes projektfüggőség, szkript és verzió kezelésére szolgál.

Az összes függőség telepítése után elindíthatjuk az alkalmazásunkat:

npm run start

A „start” egy szkript, amelyet a csomagban adtunk meg. json fájl. Megadja az alkalmazásunk belépési fájlját, ami esetünkben az app.js.

A következő üzenetnek kell megjelennie a terminálon:

nodejs_1

Ez azt jelenti, hogy a szerverünk sikeresen elindult, és figyel a 3000-es portra küldött kérésekre. Nézzük meg az app.js fájlt, és magyarázzuk el, mi történik itt:

nodejs_2

Az App.js a projektbeviteli fájlunk (és jelenleg az egyetlen). Példányosítunk egy app nevű expressz alkalmazást, megadva, hogy minden olyan kérést, amely a „GET” http metódussal és a „/” alútvonallal rendelkezik, ezen az útvonalon kezeljük, egy köztes szoftvernek nevezett függvényt adunk át, amely a kérés és válasz objektumot paramétereket. Ez döntő fontosságú, mivel a kérelem tartalmazza a kezeléséhez szükséges összes információt (paraméterek, kérés törzse, kérés fejlécek stb.), és a válaszobjektum az, amelyet visszaküld a kliensnek. Kezdjük azzal, hogy elküldjük a „Hello world” üzenetet. Ezt követően az alkalmazásunkat meghallgatjuk a megadott (esetünkben a 3000-es) portra érkező kéréseket, és naplózzuk a „Listening to 3000” üzenetet, jelezve, hogy az alkalmazásunk működik, és készen áll a kérések fogadására.

Nyissa meg a terminált, és a hivatkozássávba írja be a „localhost:3000/” kifejezést, és nyomja meg az Enter billentyűt. Ez az a megadott útvonal, amellyel helyileg elérhetjük szerverünket. A következő üzenetet fogja kapni:

nodejs_3

Adatbázis konfiguráció

A Lowdb egy nyílt forráskódú adatbázis, amely könnyen használható, és nem igényel különösebb beállítást. A mögöttes általános ötlet az, hogy az összes adatot egy helyi json-fájlban tárolják. A LowDB telepítése után (ami megtörtént, amikor az összes függőséget telepítettük), hozzáadhatjuk a következő kódot a db.js-hez:

nodejs_4

Ez a kód nagyon hasonlít a LowDB hivatalos dokumentációjában található kódhoz. Kicsit átalakítottuk saját használati esetünkre. Magyarázzuk el soronként:

Az első néhány sor a szükséges függőségek importálására szolgál. A „join” az „útvonal” modulban elérhető segédfunkció. Ez a NodeJ-k egyik alapvető modulja, amely számos módszert kínál az útvonalak kezelésére és kezelésére. Az „Low” és a „JSONFile” a LowDB által közzétett két osztály. Az első létrehozza az adatainkat tartalmazó json-fájlpéldányt. A második létrehozza a tényleges adatbázis-példányt, amely hatással lesz rá. Végül, a „lodash” az egyik leggyakrabban használt JavaScript-könyvtár, amely számos segédfunkciót kínál általános programozási feladatokhoz. Hozzáadjuk adatbázispéldányunkhoz, hogy fejlett módszereit használhassuk adataink kezelésére.

Először is megadjuk a db.json fájl elérési útját. Ez az a fájl, amely tartalmazza az adatainkat, és átadjuk a LowDB-nek. Ha a fájl nem található a megadott elérési úton, a LowDB létrehoz egyet.

Ezután átadjuk a fájl elérési útját a LowDB adapternek, majd átadjuk az új LowDB adatbázispéldányunknak. A „db” változó ezután használható az adatbázisunkkal való kommunikációra. Az adatbázispéldány létrehozása után a json fájlból olvasunk a db.read() segítségével. Ez beállítja az „adat” mezőt az adatbázispéldányunkban, hogy hozzáférhessünk az adatbázis tartalmához. Figyeljük meg, hogy ezt a sort megelőztük a „várni” szóval. Ennek célja annak meghatározása, hogy ennek az utasításnak a feloldása ismeretlen ideig tarthat, és hogy a NodeJs folyamatnak meg kell várnia a végrehajtását, mielőtt folytatná a kód többi részét. Ezt azért tesszük, mert az olvasási művelet memória-hozzáférést igényel a megadott fájlhoz, és az ilyen művelet végrehajtásának ideje a gép specifikációitól függ.

Most, hogy hozzáfértünk az adatmezőhöz, beállítjuk egy üres bejegyzéstömböt tartalmazó objektumként, vagy inkább ellenőrizzük, hogy a fájl tartalmaz-e korábbi adatokat, és ha nem, akkor beállítjuk az üres tömböt.

Végül végrehajtjuk a db.write() függvényt, hogy alkalmazzuk az adatokon végrehajtott módosításokat, és exportáljuk az adatbázispéldányt, hogy a projektünk más fájljaiban is használható legyen.

Általános kérés/válasz munkafolyamat

Tekintsük a következő diagramot:

nodejs_5

Megmutatja a NodeJs/Expressszel épített háttéralkalmazások sokaságában alkalmazott általános architektúrát. A kérések kezelése mögött meghúzódó általános munkafolyamat megértése nemcsak NodeJ-alkalmazások felépítését és felépítését teszi lehetővé, hanem azt is, hogy ezeket a koncepciókat gyakorlatilag bármilyen választott műszaki verembe átvigye. Megvizsgáljuk azokat a különböző rétegeket, amelyek zavarják ezt a folyamatot, és elmagyarázzuk szerepüket:

## HTTP-kérés réteg

Ez az első réteg az alkalmazásunkban, képzelje el, mint egy átjárót, amely a különböző kliensektől érkező kérések széles skáláját fogadja, majd minden kérést elemeznek és továbbítanak az alkalmazás dedikált részére, hogy azokat kezeljék.

  • Útválasztók: itt az Express útválasztókra gondolunk, de ez a fogalom sok háttérrendszerben megtalálható. Az útválasztók az üzleti logikánk logikai eloszlásának a kódunkban való alkalmazásának egyik módja, ami azt jelenti, hogy a hasonló tulajdonságokkal rendelkező elemek minden készletét ugyanaz a bejegyzés kezeli, és elválasztható a többi készlettől. Ennek az az előnye, hogy a kód minden összetevője független a többitől, és könnyebben karbantartható és bővíthető. Pontosabban, és példaként, minden olyan kérést, amely megfelel a „/posts” megosztott URL-útvonal feltételeinek, ugyanaz az útválasztó kezeli. A http metódusuktól függően (GET, POST stb.) más vezérlőt használ a rendszer.

  • Vezérlők: a vezérlő szűrt kéréseket fogad a forgalomirányítóktól, további feldolgozást alkalmaz, és meghívja a megfelelő szolgáltatási metódusokat.

Üzleti logikai réteg

Ez a réteg egyedi az alkalmazás konkrét használati eseteitől és a mögötte lévő üzleti logikától függően.

  • Szolgáltatások: A szolgáltatások az alkalmazás alapvető logikáját tartalmazó metódusok halmaza. Az [ORMs/ODM-ek] használatával is interakcióba lépnek az adatbázissal (https://medium.com/spidernitt/orm-and-odm-a-brief-introduction-369046ec57eb#:~:text=ODM%20is%20Object %20Dokumentum%20Leképezés,grafikon%20adatbázis%2C%20stb.).).

  • Harmadik féltől származó szolgáltatások: sok modern alkalmazás úgy dönt, hogy az alkalmazás logikájának egy részét egy API-n keresztül elérhető dedikált szolgáltatásokra delegálja. Az ilyen jellegű szolgáltatások lehetnek fizetéskezelési szolgáltatások, statikus fájlok tárolása, értesítések és mások.

  • ODM/ORM: Az ORM-ek és ODM-ek közvetítőként működnek a szolgáltatások és az adatbázis között. Szerepük az, hogy magas szintű absztrakciót biztosítsanak egy adatbázison, amely lehetővé teszi a fejlesztő számára, hogy az általa választott programozási nyelven írjon kódot a dedikált adatbázisnyelvek, például az SQL helyett.

Adatperzisztencia réteg

  • Adatbázisok: mint korábban említettük, szinte minden alkalmazásnak szüksége van valamilyen adatmegmaradásra. Ezt a részt adatbázisok kezelik, és az adatok természetétől, az üzleti logikától és sok egyéb szemponttól függően az alkalmazás hatékonysága és skálázhatósága szempontjából kulcsfontosságú egy adott adatbázis kiválasztása a másikkal szemben.

Példa: Bejegyzés hozzáadása

Most, hogy megértettük az építészet mögött meghúzódó általános gondolatot, alkalmazzuk egyszerű példánkra. Megvalósítjuk azt a funkciót, hogy egy teendőbejegyzést adjunk hozzá az alkalmazásunkhoz. Tegyük fel, hogy minden bejegyzésnek van egyedi azonosítója, amely lehetővé teszi számunkra, hogy később azonosíthassuk az adatbázisunkban, egy cím, amely egy karakterlánc, és egy sorrend, amely egész típusú. A diagramunkat követve kezdjük a router megvalósításával. Adja hozzá a következő kódot az index.js fájlhoz:

Starting a server in ExpressJS

Ez a mi router fájlunk. Importáljuk az expressz és az „addPost” metódust a vezérlőnkből (ezt hamarosan megvalósítjuk), létrehozzuk az expressz útválasztó példányát, és az addPost metódust a routerünkhöz kötjük – ami azt jelenti, hogy minden olyan kéréshez, amely rendelkezik a gyökérúttal és a http-vel. "POST" metódus, az "addPost" metódus lesz meghívva a kezeléséhez.

Mielőtt a metódusunkat implementáljuk a vezérlőben, hivatkozzunk az új útválasztóra a fő app.js fájlunkban, és adjuk meg az elérési utat „/posts”-ként: A megadott útvonalakkal rendelkező összes útvonal erre a routerre kerül, így kezelhető. különböző vezérlőmódszerekkel:

Starting a server in ExpressJS

Importáljuk az útválasztót, és „bejegyzéseknek” nevezzük el. Az app.use(“/posts”,...) azt jelenti, hogy a „/posts” alútvonallal rendelkező összes kérés, függetlenül a http metódustól, a megadott útválasztóhoz lesz irányítva.

Az app.js további módosításai közé tartozik az adatbázis-konfigurációs fájl importálása annak végrehajtása érdekében, valamint az express.json() köztes szoftverként való használata, amely lehetővé teszi számunkra a kérelem törzsobjektumának elérését.

Most, hogy az útvonalaink be vannak állítva, hozzáadhatjuk az „addPost” metódust a controller.js fájlhoz:

Starting a server in ExpressJS

Az „addPost” egy köztes szoftver függvény, amely paraméterként veszi a kérést, a válaszobjektumokat és a következő függvényt. A következő függvény meghívásakor a folyamat a lánc következő köztes szoftverére lép, vagy befejezi a kérést. A metódus kódjában kivonjuk a címet és a sorrendet a kérés törzséből, és paraméterként átadjuk a „createPost” szolgáltatásfüggvénynek. Ez a függvény átveszi a bejegyzés attribútumait, új bejegyzést hoz létre, és visszaadja azt. Az új bejegyzés létrehozását követően a 200-as állapotkóddal együtt visszaküldjük az ügyfélnek, ami azt jelenti, hogy a kérés sikeres volt. Észreveheti, hogy kódunk egy try/catch blokkba kerül, hogy elkapja a váratlan hibákat, és átadja a következő köztes szoftvernek. A legjobb gyakorlatnak tekinthető, ha minden útválasztóhoz csatolnak egy hibakezelő köztes szoftvert, amely kibontja a hibát, és értelmes hibaüzenetet küld vissza az ügyfélnek.

Már csak a „createPost” funkció megvalósítása van hátra a service.js fájlban:

nodejs_6

Amint azt korábban említettük az architektúra különböző rétegeinek ismertetésekor, a szolgáltatási réteg az ORM/ODM használatával kölcsönhatásba lép az adattárolási megoldással. Példánkban azonban nem kell külön ORM-et használnunk, mivel a Lowdb beépített Javascript-támogatással rendelkezik. A szintaxisának minden részlete megtalálható a dokumentációban.

A „createPost” metódus címet és sorrendet kap paraméterként, és ezek alapján hozza létre a post objektumot. Az egyedi azonosítóhoz egy „nanoid” nevű dedikált könyvtárat használunk, amely egyedi karaktersorozatot generál. Az új bejegyzést hozzáadjuk az adatbázis posts tömbjéhez, és beírjuk ezeket a változtatásokat; az új bejegyzést ezután a függvény visszaadja.

Most, hogy a „createPost” készen áll, a bejegyzések hozzáadása funkció befejeződött és működik. Az API-k tesztelésére szolgáló népszerű eszköz, a Postman segítségével teszteljük:

nodejs_7

A kérés http-módszereként a „POST”-t választjuk a megadott „localhost:3000/posts” url elérési úttal együtt. A címet és a sorrendet json formátumban adjuk hozzá a törzsrészhez, és elküldjük a kérést. Ahogy fentebb látható, megkapjuk a 200 OK állapotot az újonnan létrehozott bejegyzéssel együtt.

Következtetés

Számos koncepciót és ötletet vizsgáltunk meg ebben a projektben: Kitértünk a projektkörnyezetünk telepítésére és beállítására, megtanultuk, hogyan kell beállítani a LowDB-t a helyi adatok megmaradása érdekében, megvizsgáltuk a NodeJS/Express háttéralkalmazások általános architektúráját, és megnéztük, hogyan alkalmazza egy egyszerű példában. Végül a Postman segítségével teszteltük alkalmazásunkat.

A cél az volt, hogy egy egyszerűsített változatot tárjunk fel mindarról, ami a modern háttéralkalmazások felépítéséhez szükséges. Ahogy korábban láttuk, a NodeJs egy hatékony eszköz, amely lehetővé teszi egyszerű és összetett API-k létrehozását. A keretrendszerek gazdag ökoszisztémájával, mint például az expressz, valamint a rengeteg eszközzel és könyvtárral kombinálva szinte bármilyen felhasználási esetre, ez egy legális megoldás a modern háttérfejlesztéshez – ezt a megoldást javasoljuk megtanulni és elsajátítani.


Career Services background pattern

Karrier szolgáltatások

Contact Section background image

Maradjunk kapcsolatban

Code Labs Academy © 2024 Minden jog fenntartva.