Įvadas į NodeJs

nodejs
javascript
serveris
Įvadas į NodeJs cover image

Įvadas

Bandydami sužinoti apie internetą

dažniausiai pastebime, kad priekinė dalis yra daug labiau prieinama nei užpakalinė dalis. Tam yra daug priežasčių, ypač momentinio grįžtamojo ryšio jausmas, atsirandantis pakeitus tam tikrą puslapio elementą kode ir pastebėjus svetainėje taikomą pakeitimą. Šie atsiliepimai dažnai naudingi pradedantiesiems, nes jie leidžia koreguoti savo kodą ir mokytis iš klaidų. Deja, taip nėra su backend: dažnai daug darbo tenka iš anksto nustatyti aplinką ir įdiegti priklausomybes, reikalingas tam, kad terminale atsirastų paprastas pranešimas „Hello World“. Laimei,, atvirojo kodo bendruomenėje nuolat daroma pažanga palengvinant struktūrų kūrimo procesą, o tobulinant kūrėjo patirtį. Ši sistema yra labai galinga technologija, leidžianti rašyti serveryje „Javascript“ kodas yra patogus ir siūlo įvairius integruotus įrankius ir funkcijas, kurie išskiria jį iš konkurentų. Šiame straipsnyje mes išnagrinėsime „NodeJ“ ir jo ekosistemą, naudodami praktinį požiūrį, kurdami visiškai funkcionalų projektą.

Ką mes statysime?

„ToDo“ programos yra projektas, skirtas pradedantiesiems, besimokantiems kurti priekinės dalies. Štai kodėl nusprendėme sukurti Todo sąrašo API. Tai leis mums pridėti duomenų išlikimo į mūsų sąsają ir suteiks mums galimybę manipuliuoti šiais duomenimis (pridedant, atnaujinant, ištrinant užduotis ir pan.).

Galutinį kodą galite rasti čia.

Mūsų įrankiai

Šiam projektui naudosime supaprastintą technologijų paketą. Tai gali būti laikoma minimalia daugelio įrankių, kuriuos rasite realiuose projektuose, versija, nes aukštesnio lygio idėjos yra vienodos. Įdiegimo detalės ir konkretaus įrankio pasirinkimas prieš kitą nėra svarbūs norint pradėti.

  • „NodeJs“, kaip minėjome, yra viena iš populiariausių „Javascript“ karkasų, skirtų serverio pusės programoms kurti.

  • „ExpressJs“ yra minimali „Javascript“ sistema, naudojama „NodeJS“. Tai pagreitina kūrimo procesą, nes naudoja daug integruotų funkcijų. Jis taip pat naudojamas kaip būdas standartizuoti kūrimo praktiką NodeJS projektuose, siekiant palengvinti jo naudojimą inžinieriams.

  • LowDB yra paprasta duomenų bazė atmintyje. Jo paprastumas leidžia mums parodyti, kaip sąveikauti su duomenų baze NodeJs projekte, nenagrinėjant sudėtingesnių dalykų, tokių kaip diegimas ir konfigūravimas.

Dabar, kai nustatėme visus įrankius, kuriuos naudosime, pereikime prie savo klaviatūrų ir pradėkime kodavimą!

Diegimas

Node galimas visose platformose. Visus diegimo vadovus rasite oficialioje svetainėje. „Windows“ naudotojai turėtų būtinai pridėti mazgą kelias į aplinkos kintamuosius, kad jį būtų galima naudoti komandinėje eilutėje.

Mums taip pat reikės įdiegti npm. Npm yra standartinė NodeJ paketų tvarkyklė. Tai leis mums valdyti mūsų projektų priklausomybes. Diegimo vadovą galite rasti čia.

Projekto inicijavimas

Eikite į nuorodą ir klonuokite pradinį projektą:

Tai paprasta mūsų projekto pradinė saugykla. Jame yra visos priklausomybės, kurias naudosime kartu su projekto failo struktūra. Mes paaiškinsime kiekvieną elementą, kai jis bus pasiektas. Atidarykite terminalą, eikite į projekto kelią ir paleiskite komandą:

npm install

Taip bus įdiegtos visos pakete.json faile nurodyto projekto priklausomybės. package.json yra failas, esantis bet kurio „Javascript“ / „NodeJs“ projekto šaknyje, jame yra pastarojo metaduomenų ir naudojamas visoms projekto priklausomybėms, scenarijams ir versijoms valdyti.

Įdiegę visas priklausomybes, galime paleisti programą:

npm run start

„Start“ yra scenarijus, kurį nurodėme pakete. json failą. Jis nurodo įvesties failą į mūsų programą, kuri mūsų atveju yra app.js.

Dabar jūsų terminale turėtų pasirodyti šis pranešimas:

nodejs_1

Tai reiškia, kad mūsų serveris sėkmingai startavo ir klauso bet kokių užklausų, siunčiamų į 3000 prievadą. Pažiūrėkime į app.js ir paaiškinkime, kas čia vyksta:

nodejs_2

App.js yra mūsų projekto įvedimo failas (ir šiuo metu vienintelis). Mes sukuriame greitąją programą pavadinimu app, nurodome, kad visos užklausos, turinčios http metodą „GET“ ir pokelį „/“, bus tvarkomos šiuo maršrutu, perduodame funkciją, vadinamą tarpine programine įranga, kuri užklausos ir atsakymo objektą priima kaip parametrus. Tai labai svarbu, nes užklausoje yra visa jai tvarkyti reikalinga informacija (parametrai, užklausos turinys, užklausos antraštės ir kt.), o atsakymo objektas yra tas, kuris bus grąžintas klientui. Pradedame tiesiog išsiųsdami pranešimą „Sveikas pasaulis“. Po to mes priverčiame savo programą klausytis visų gaunamų užklausų į nurodytą prievadą (mūsų atveju 3000) ir užregistruojame pranešimą „Listening to 3000“, kad parodytume, kad mūsų programa veikia ir yra paruošta priimti užklausas.

Atidarykite terminalą ir nuorodų juostoje įveskite „localhost:3000/“ ir paspauskite Enter. Tai yra nurodytas kelias, kuriuo galime pasiekti savo serverį vietoje. Gausite tokį pranešimą:

nodejs_3

Duomenų bazės konfigūracija

Lowdb yra atviro kodo duomenų bazė, kurią lengva naudoti ir kuriai nereikia jokios konkrečios sąrankos. Bendra idėja yra saugoti visus duomenis vietiniame json faile. Įdiegę LowDB (kas buvo padaryta, kai įdiegėme visas priklausomybes), prie db.js galime pridėti šį kodą:

nodejs_4

Šis kodas yra gana panašus į tą, kuris yra oficialiuose LowDB dokumentuose. Mes šiek tiek pakoregavome jį savo reikmėms. Paaiškinkime tai eilutė po eilutės:

Pirmosios kelios eilutės skirtos būtinoms priklausomybėms importuoti. „Prisijungti“ yra naudingumo funkcija, pasiekiama „kelio“ modulyje. Tai vienas iš pagrindinių „NodeJ“ modulių, siūlantis daugybę būdų, kaip tvarkyti ir valdyti kelius. „Low“ ir „JSONFile“ yra dvi klasės, kurias atskleidžia LowDB. Pirmasis sukuria json failo egzempliorių, kuriame bus mūsų duomenys. Antrasis sukuria tikrąjį duomenų bazės egzempliorių, kuris jį veiks. Galiausiai „lodash“ yra viena iš dažniausiai naudojamų „Javascript“ bibliotekų, siūlančių daugybę naudingų funkcijų įprastoms programavimo užduotims atlikti. Pridedame jį prie savo duomenų bazės egzemplioriaus, kad galėtume naudoti pažangius metodus tvarkydami savo duomenis.

Pirmiausia nurodome failo db.json kelią. Tai failas, kuriame bus mūsų duomenys ir kuris bus perduotas LowDB. Jei failas nerastas nurodytu keliu, LowDB jį sukurs.

Tada perduodame failo kelią į LowDB adapterį ir perduodame jį mūsų naujam LowDB duomenų bazės egzemplioriui. Tada „db“ kintamasis gali būti naudojamas susisiekti su mūsų duomenų baze. Sukūrę duomenų bazės egzempliorių, skaitome iš json failo naudodami db.read(). Taip mūsų duomenų bazės egzemplioriuje bus nustatytas „duomenų“ laukas, kad galėtume pasiekti duomenų bazės turinį. Atkreipkite dėmesį, kad prieš šią eilutę parašėme „laukti“. Taip norima nurodyti, kad šiai instrukcijai išspręsti gali prireikti nežinomo laiko ir kad NodeJ procesas turi palaukti, kol bus įvykdytas, prieš tęsdamas likusį kodą. Tai darome, nes nuskaitymo operacijai reikia atminties prieigos prie nurodyto failo, o laikas, per kurį reikia atlikti tokią operaciją, priklauso nuo jūsų įrenginio specifikacijų.

Dabar, kai turime prieigą prie duomenų lauko, nustatome jį kaip objektą, kuriame yra tuščias pranešimų masyvas, tiksliau, patikriname, ar faile nėra ankstesnių duomenų, ir nustatome tuščią masyvą, jei taip nėra.

Galiausiai vykdome db.write(), kad pritaikytume pakeitimus, kuriuos atlikome duomenims, ir eksportuojame duomenų bazės egzempliorių, kad jį būtų galima naudoti kituose mūsų projekto failuose.

Bendra užklausų/atsakymų darbo eiga

Apsvarstykite šią diagramą:

nodejs_5

Tai rodo bendrą architektūrą, taikomą daugybėje užpakalinių programų, sukurtų naudojant „NodeJs / Express“. Suprasdami bendrą užklausos tvarkymo darbo eigą, galėsite ne tik kurti ir struktūrizuoti NodeJ programas, bet ir perkelti šias sąvokas į praktiškai bet kurį pasirinktą techninį krūvą. Išnagrinėsime skirtingus sluoksnius, kurie trukdo šiam procesui, ir paaiškinsime jų vaidmenį:

## HTTP užklausos sluoksnis

Tai pirmasis mūsų programos sluoksnis. Įsivaizduokite jį kaip šliuzą, kuris gauna daugybę skirtingų užklausų iš skirtingų klientų, tada kiekviena užklausa analizuojama ir persiunčiama į tam skirtą programos dalį, kad ji būtų tvarkoma.

  • Maršrutizatoriai: čia kalbame apie „Express“ maršrutizatorius, tačiau šią sąvoką galima rasti daugelyje vidinių sistemų. Maršrutizatoriai – tai būdas mūsų kodui pritaikyti mūsų verslo logikos loginį paskirstymą, o tai reiškia, kad kiekvienas elementų rinkinys, turintis panašias funkcijas, yra apdorojamas tuo pačiu įrašu ir gali būti atskirtas nuo kitų rinkinių. Tai naudinga tuo, kad kiekvienas kodo komponentas tampa nepriklausomas nuo kitų, juos lengviau prižiūrėti ir išplėsti. Tiksliau, kaip pavyzdį, visas užklausas, atitinkančias bendrinamo URL kelio „/posts“ sąlygas, tvarkys tas pats maršrutizatorius. Priklausomai nuo jų http metodo (GET, POST ir kt.), bus naudojamas kitas valdiklis.

  • Valdikliai: valdiklis gauna filtruotas užklausas iš maršrutizatorių, taiko papildomą apdorojimą ir iškviečia tinkamus aptarnavimo metodus.

Verslo logikos sluoksnis

Šis sluoksnis yra unikalus, atsižvelgiant į konkrečius programos naudojimo atvejus ir verslo logiką.

– Paslaugos: paslaugos yra metodų rinkinys, kuriame yra pagrindinė programos logika. Jie taip pat sąveikauja su duomenų baze naudodami ORMs/ODM.).

  • Trečiųjų šalių paslaugos: daugelis šiuolaikinių programų pasirenka dalį programos logikos deleguoti tam skirtoms paslaugoms, pasiekiamoms per API. Tokios paslaugos gali būti mokėjimų tvarkymo paslaugos, statinių failų saugojimas, pranešimai ir kt.

  • ODM/ORM: ORM ir ODM veikia kaip tarpininkai tarp paslaugų ir duomenų bazės. Jų vaidmuo yra teikti aukšto lygio abstrakciją duomenų bazėje, leidžiančią kūrėjui rašyti kodą pasirinkta programavimo kalba, o ne tam skirtomis duomenų bazės kalbomis, pvz., SQL.

Duomenų patvarumo sluoksnis

  • Duomenų bazės: kaip minėjome anksčiau, beveik visoms programoms reikalingas tam tikras duomenų išlikimas. Šią dalį tvarko duomenų bazės, todėl, atsižvelgiant į duomenų pobūdį, verslo logiką ir daugelį kitų aplinkybių, tam tikros duomenų bazės pasirinkimas prieš kitą yra labai svarbus siekiant efektyvumo ir programos mastelio.

Pavyzdys: įrašo pridėjimas

Dabar, kai suprantame bendrą architektūros idėją, pritaikykime ją mūsų paprastam pavyzdžiui. Įdiegsime todo įrašo įtraukimo į programą funkciją. Tarkime, kad bet kuris įrašas turi unikalų ID, kuris leis mums vėliau jį identifikuoti mūsų duomenų bazėje, pavadinimą, kuris yra eilutė, ir tvarką, kurios tipas yra sveikasis skaičius. Vadovaudamiesi mūsų schema, pradėsime nuo maršrutizatoriaus diegimo. Pridėkite šį kodą prie index.js failo:

Starting a server in ExpressJS

Tai mūsų maršrutizatoriaus failas. Importuojame greitąjį ir „addPost“ metodą iš savo valdiklio (netrukus jį įdiegsime), sukuriame greitojo maršrutizatoriaus egzempliorių ir susiejame addPost metodą su mūsų maršrutizatoriumi – tai reiškia, kad kiekvienai užklausai, kuri turi šakninį kelią ir http metodas „POST“, tai bus iškviestas metodas „addPost“.

Prieš įdiegdami metodą valdiklyje, pagrindiniame faile app.js nurodome naują maršrutizatorių ir nurodome jo kelią kaip „/posts“: visi maršrutai su nurodytais keliais bus persiųsti į šį maršrutizatorių, kad jį būtų galima tvarkyti skirtingais valdiklio metodais:

Starting a server in ExpressJS

Mes importuojame maršrutizatorių ir pavadiname jį „postais“. app.use("/posts",...) reiškia, kad visos užklausos su pokeliu "/posts", neatsižvelgiant į jų http metodą, bus nukreiptos į nurodytą maršrutizatorių.

Kiti app.js pakeitimai apima duomenų bazės konfigūracijos failo importavimą, kad jis būtų vykdomas, ir express.json() naudojimą kaip tarpinę programinę įrangą, kad galėtume pasiekti užklausos turinio objektą.

Dabar, kai mūsų maršrutai yra nustatyti, faile controller.js galime pridėti metodą „addPost“:

Starting a server in ExpressJS

„addPost“ yra tarpinės programinės įrangos funkcija, kuri kaip parametrus priima užklausą, atsakymo objektus ir kitą funkciją. Kai bus iškviesta kita funkcija, procesas pereis prie kitos grandinės tarpinės programinės įrangos arba užbaigs užklausą. Metodo kode ištraukiame pavadinimą ir užsakymą iš užklausos turinio ir perduodame juos kaip parametrus paslaugų funkcijai „createPost“. Ši funkcija paima įrašo atributus, sukuria naują įrašą ir grąžina jį. Sukūrę naują įrašą, grąžiname jį klientui kartu su būsenos kodu 200, o tai reiškia, kad užklausa buvo patenkinta. Galite pastebėti, kad mūsų kodas įdėtas į try/catch bloką, kad būtų užfiksuota bet kokia netikėta klaida, ir perduoti jį kitai tarpinei programinei įrangai. Laikoma geriausia praktika prie visų maršrutizatorių prijungti tarpinę klaidų valdymo programinę įrangą, kuri ištraukia klaidą ir klientui grąžina reikšmingą klaidos pranešimą.

Dabar belieka įdiegti funkciją „createPost“ serveryje service.js:

nodejs_6

Kaip minėjome anksčiau aiškindami skirtingus architektūros sluoksnius, paslaugų sluoksnis sąveikauja su duomenų saugojimo sprendimu naudodamas ORM/ODM. Tačiau mūsų pavyzdyje mums nereikės naudoti atskiro ORM, nes „Lowdb“ yra su integruotu „Javascript“ palaikymu. Visą išsamią informaciją apie jo sintaksę galite rasti dokumentacijoje.

Metodas „createPost“ gauna pavadinimą ir tvarką kaip parametrus ir naudoja juos kuriant įrašo objektą. Unikaliam ID naudojame tam skirtą biblioteką, vadinamą „nanoidu“, kuri generuoja unikalią simbolių seką. Įtraukiame naują įrašą į duomenų bazės pranešimų masyvą ir įrašome šiuos pakeitimus; tada funkcija grąžina naują įrašą.

Dabar, kai „createPost“ paruošta, įrašų pridėjimo funkcija baigta ir veikia. Testuojame naudodami „Postman“ – populiarų API testavimo įrankį:

nodejs_7

Mes pasirenkame „POST“ kaip užklausos http metodą kartu su nurodytu URL keliu „localhost:3000/posts“. Turinio skiltyje pridedame pavadinimą ir užsakymą kaip json formatą ir išsiunčiame užklausą. Kaip parodyta aukščiau, kartu su naujai sukurtu įrašu gauname 200 gerai būseną.

Išvada

Šiame projekte buvo ištirta daug koncepcijų ir idėjų: aptarėme, kaip įdiegti ir nustatyti savo projekto aplinką, išmokome sukonfigūruoti LowDB vietiniam duomenų išlikimui, ištyrėme bendrą NodeJS/Express backend programų architektūrą ir pamatėme, kaip pritaikykite jį paprastu pavyzdžiu. Galiausiai išbandėme savo programą naudodami „Postman“.

Tikslas buvo pateikti supaprastintą viso to, kas reikalinga kuriant modernias pagrindines programas, versiją. Kaip matėme anksčiau, NodeJs yra galingas įrankis, leidžiantis kurti paprastas ir sudėtingas API. Kartu su turtinga struktūrų ekosistema, pvz., „Express“ ir daugybe įrankių bei bibliotekų, skirtų beveik bet kokiam naudojimo atvejui, tai yra teisėtas sprendimas šiuolaikiniam backend kūrimui – sprendimas, kurį rekomenduojame išmokti ir įsisavinti.


Career Services background pattern

Karjeros paslaugos

Contact Section background image

Palaikykime ryšį

Code Labs Academy © 2024 Visos teisės saugomos.