NodeJs-en sarrera

nodejs
javascript
zerbitzaria
NodeJs-en sarrera cover image

Sarrera

Webari buruz ikasten saiatzean

garapena, normalean frontend-a backend-a baino askoz eskuragarriagoa dela aurkitzen dugu. Arrazoi asko daude horretarako, batez ere kodeko orrialde bateko elementu jakin bat aldatzeak eta webguneari aplikatzen zaion aldaketaz ohartzeak sortzen duen berehalako iritziaren sentsazioa. Iritzi hau lagungarria izan ohi da hasiberrientzat, haien kodea doitzeko eta akatsetatik ikasteko aukera ematen dielako. Zoritxarrez, ez da backend-aren kasua: sarritan, lan handia ematen da ingurunea aldez aurretik konfiguratzera eta beharrezkoak diren menpekotasunak instalatzera, terminalean "Hello World" mezu sinple bat ager dadin. Zorionez., kode irekiko komunitatean aurrerapen asko egiten ari dira markoen garapen-prozesua errazteko, eta garatzaileen esperientzia hobetzea da horren adibide ona kodea Javascript-en erosoa, eta bere lehiakideetatik bereizten duten hainbat tresna eta ezaugarri eskaintzen ditu Artikulu honetan, NodeJs eta bere ekosistema aztertuko ditugu, ikuspegi praktiko batekin, proiektu guztiz funtzional bat eraikiz.

Zer eraikiko dugu?

ToDo aplikazioak front-end garapena ikasten hasiberrientzako proiektu bat dira. Horregatik, Todo list API bat sortzea erabaki dugu. Honek gure interfazeari datu iraunkortasuna gehitzeko aukera emango digu, eta datu horiek manipulatzeko aukera emango digu (guztiak gehituz, eguneratuz, ezabatuz, etab...).

Azken kodea [hemen] aurki daiteke (https://github.com/Zineeddine998/workshop_todo_application).

Gure tresnak

Proiektu honetarako pila teknologiko sinplifikatu bat erabiliko dugu. Bizitza errealeko proiektuetan aurkituko dituzun tresna askoren bertsio minimotzat har daiteke, arrazoia goi-mailako ideiak berdinak direla. Tresna zehatz baten ezarpenaren eta aukeratzearen xehetasunak ez dira garrantzitsuak hasteko.

  • NodeJs, aipatu dugun bezala, zerbitzariaren aldeko aplikazioak eraikitzeko Javascript esparru ezagunenetako bat da.

  • ExpressJs NodeJS-en gainean erabiltzen den Javascript marko minimo bat da. Garapen-prozesua bizkortzen du integratutako funtzio asko erabiliz. NodeJS proiektuetan garapen-praktikak estandarizatzeko modu gisa ere erabiltzen da, ingeniariei erabilera errazteko.

  • LowDB memoriako datu-base sinple bat da. Bere sinpletasunari esker, NodeJs proiektu batean datu-base batekin nola interakzionatu erakusteko aukera ematen digu, inplementazioak eta konfigurazioak bezalako gai aurreratuagoak landu gabe.

Orain erabiliko ditugun tresna guztiak identifikatu ditugunean, goazen gure teklatuetara eta has gaitezen kodetzen!

Instalazioa

Node plataforma guztietan dago eskuragarri. Instalazio-gida guztiak webgune ofizialean aurki daitezke. Windows erabiltzaileek inguruko aldagaien bidea gehitzen dutela ziurtatu beharko lukete, komando-lerroan erabili ahal izateko.

Npm instalatuta ere beharko dugu. Npm NodeJs-en paketeen kudeatzaile estandarra da. Gure proiektuaren mendekotasunak kudeatzeko aukera emango digu. Instalazio-gida aurki daiteke hemen.

Proiektua hasieratzea

Sartu estekara eta klonatu hasierako proiektua:

Hau gure proiekturako hasierako biltegi sinple bat da. Proiektuaren fitxategi-egiturarekin batera erabiliko ditugun mendekotasun guztiak ditu. Elementu bakoitza iritsitakoan azalduko dugu. Ireki terminala, nabigatu proiektuaren bidera eta exekutatu komandoa:

npm install

Honek package.json fitxategian zehaztutako proiektuaren menpekotasun guztiak instalatuko ditu. package.json edozein Javascript/NodeJs proiekturen erroan aurkitzen den fitxategia da, azken honi buruzko metadatuak ditu eta proiektuaren mendekotasun, script eta bertsio guztiak kudeatzeko erabiltzen da.

Mendekotasun guztiak instalatu ondoren, gure aplikazioa abiarazi dezakegu:

npm run start

"hasi" paketean zehaztu dugun script bat da. json fitxategia. Gure aplikaziorako sarrera fitxategia zehazten du, gure kasuan app.js dena.

Mezu hau zure terminalean agertu beharko litzateke:

nodejs_1

Horrek esan nahi du gure zerbitzaria behar bezala hasi dela, eta 3000 atakara bidalitako edozein eskaera entzuten ari dela. Ikus dezagun app.js-ra eta azaldu zer gertatzen ari den hemen:

nodejs_2

App.js gure proiektuaren sarrera fitxategia da (eta momentu honetan bakarra). App izeneko aplikazio espres bat instantziatzen dugu, zehaztu http metodoa eta '/' azpibidea duten eskaera guztiak bide honen bidez kudeatuko direla, middleware izeneko funtzio bat pasatzen dugu, eskaera eta erantzun objektu gisa hartzen dituena. parametroak. Hori funtsezkoa da, eskaerak kudeatzeko behar den informazio guztia baitauka (parametroak, eskaeraren gorputza, eskaeraren goiburuak, etab.), eta erantzun objektua bezeroari itzuliko zaiona. Hasteko, "Kaixo mundua" mezua bidaltzen dugu. Horren ondoren, gure aplikazioak zehaztutako ataka (gure kasuan 3000) jasotzen dituen eskaerak entzuten ditugu eta "3000 ataka entzuten" mezua erregistratzen dugu, gure aplikazioa martxan dagoela eta eskaerak jasotzeko prest dagoela adierazteko.

Ireki terminala eta esteka barran idatzi "localhost:3000/" eta sakatu Sartu. Hau da gure zerbitzari lokalean heltzeko erabil dezakegun zehaztutako bidea. Honako mezu hau jasoko duzu:

nodejs_3

Datu-basearen konfigurazioa

Lowdb kode irekiko datu-base bat da, erabiltzeko erraza dena eta ez du konfigurazio zehatzik behar. Horren atzean dagoen ideia orokorra datu guztiak json fitxategi lokal batean gordetzea da. LowDB instalatu ondoren (mendekotasun guztiak instalatu ditugunean egin dena), db.js-en kode hau gehi dezakegu:

nodejs_4

Kode hau LowDB-ren dokumentazio ofizialean aurkitzen denaren nahiko antzekoa da. Apur bat moldatu dugu gure erabilera kasurako. Azal dezagun lerroz lerro:

Lehen lerroak beharrezko mendekotasunak inportatzeko dira. "join" erabilgarritasun-funtzio bat da "path" moduluan. NodeJs-en oinarrizko moduluetako bat da, bideak tratatzeko eta kudeatzeko metodo asko eskaintzen dituena. "Low" eta "JSONFile" dira LowDB-k erakusten dituen bi klaseak. Lehenengoak gure datuak edukiko dituen json fitxategiaren instantzia sortzen du. Bigarrenak horren gainean jardungo duen benetako datu-basearen instantzia sortzen du. Azkenik, "lodash" javascript liburutegirik erabilienetako bat da, programazio-zeregin arruntetarako erabilgarritasun-funtzio ugari eskaintzen dituena. Gure datu-basearen instantziara gehitzen dugu, gure datuak kudeatzeko bere metodo aurreratuak erabiltzeko.

Lehenik eta behin, db.json fitxategiaren bidea zehazten dugu. Gure datuak edukiko dituen fitxategia da, eta LowDB-ra pasatuko dena. Fitxategia zehaztutako bidetik aurkitzen ez bada, LowDB-k bat sortuko du.

Ondoren, fitxategiaren bidea LowDB egokitzailera pasatzen dugu eta gure LowDB datu-basearen instantzia berrira pasatzen dugu. "db" aldagaia gure datu-basearekin komunikatzeko erabil daiteke. Datu-basearen instantzia sortu ondoren, json fitxategitik irakurtzen dugu db.read() erabiliz. Honek "datuak" eremua ezarriko du gure datu-basearen instantzian, datu-basearen edukia atzitu ahal izateko. Kontuan izan lerro honen aurretik "itxaron" jarri genuela. Honen bidez, instrukzio honek ebazteko denbora ezezagun bat behar izan dezakeela eta NodeJs prozesuak exekutatzeko itxaron behar duela gainerako kodearekin jarraitu aurretik. Hau egiten dugu irakurketa eragiketak memoriarako sarbidea behar duelako zehaztutako fitxategirako, eta eragiketa mota hau exekutatzeko denbora zure makinaren zehaztapenen araberakoa delako.

Orain datu-eremurako sarbidea dugunean, argitalpenen array huts bat duen objektu gisa ezarriko dugu, edo hobeto esanda, fitxategiak aurreko daturik duen egiaztatzen dugu eta matrize hutsa ezartzen dugu horrela ez bada.

Azkenik, db.write() exekutatzen dugu datuei egindako aldaketak aplikatzeko, eta datu-basearen instantzia esportatzen dugu, gure proiektuko beste fitxategi batzuetan erabili ahal izateko.

Eskaera/erantzun orokorraren lan-fluxua

Kontuan hartu honako diagrama hau:

nodejs_5

NodeJs/Express-ekin eraikitako backend aplikazio ugaritan aplikatutako arkitektura orokorra erakusten du. Eskaera bat kudeatzeko atzean dagoen lan-fluxu orokorra ulertzeak NodeJs aplikazioak eraiki eta egituratzeaz gain, kontzeptu horiek nahi duzun ia edozein pila teknikora transferitzeko aukera emango dizu. Prozesu hori oztopatzen duten geruza desberdinak aztertuko ditugu, eta haien eginkizunak azalduko ditugu:

## HTTP eskaera geruza

Hau da gure aplikazioko lehen geruza, imajina ezazu bezero ezberdinetatik datozen eskaera ugari jasotzen dituen atebide gisa, eskaera bakoitza aztertu eta aplikazioaren zati dedikatura bidaltzen da, kudeatu dezan.

  • Bideratzaileak: hemen Express routerrei buruz ari gara, baina kontzeptu hau backend esparru askotan aurki daiteke. Bideratzaileak gure negozio-logikan dagoen banaketa logikoa gure kodeari aplikatzeko modu bat dira, hau da, antzeko ezaugarriak dituzten elementu multzo bakoitza sarrera berberak kudeatzen du, eta gainerako multzoetatik bereiz daitezke. Honek kodearen osagai bakoitza besteengandik independentea izatearen onura du, eta errazago mantentzea eta hedatzea. Zehazkiago, eta adibide gisa, partekatutako url bidearen baldintzak betetzen dituzten eskaera guztiak "/posts" bideratzaile berak kudeatuko ditu. Beren http metodoaren arabera (GET, POST, etab..), beste kontrolagailu bat erabiliko da.

  • Kontrolatzaileak: kontrolagailu batek bideratzaileetatik iragazitako eskaerak jasotzen ditu, prozesamendu osagarria aplikatzen du eta zerbitzu-metodo egokiak deitzen ditu.

Negozio-geruza logika

Geruza hau bakarra da aplikazioaren erabilera kasu zehatzen eta horren atzean dagoen negozio logikaren arabera.

  • Zerbitzuak: Zerbitzuak aplikazioaren oinarrizko logika duten metodo multzo bat dira. Datu-basearekin ere elkarreragiten dute ORMs/ODMs erabiliz. %20Document%20Mapping,graph%20database%2C%20etc.).

  • Hirugarrenen zerbitzuak: aplikazio moderno askok aplikazioaren logikaren zati bat API baten bidez eskura daitezkeen zerbitzu dedikatuetan delegatzea aukeratzen dute. Mota honetako zerbitzuak ordainketak kudeatzeko zerbitzuak, fitxategi estatikoak biltegiratzea, jakinarazpenak eta beste izan daitezke.

  • ODM/ORM: ORMek eta ODMek zerbitzuen eta datu-basearen arteko bitartekari gisa jarduten dute. Haien eginkizuna datu-base baten gainean maila altuko abstrakzio bat eskaintzea da, garatzaile bati kodea idazteko aukera ematen dion programazio-lengoaian, datu-base-lengoai dedikatuen ordez, adibidez, SQL.

Datuen iraunkortasun geruza

  • Datu-baseak: lehen aipatu dugun bezala, ia aplikazio guztiek behar dute nolabaiteko datuen iraunkortasuna. Zati hau datu-baseek kudeatzen dute, eta datuen izaera, negozio-logikaren eta beste hainbat konturen arabera, datu-base jakin bat beste baten aukeratzea erabakigarritzat jotzen da aplikazioaren eraginkortasunerako eta eskalagarritasunerako.

Adibidea: Argitalpen bat gehitzea

Arkitekturaren atzean dagoen ideia orokorra ulertzen dugunean, aplikatu dezagun gure adibide sinpleari. Gure aplikazioari todo post bat gehitzeko funtzioa ezarriko dugu. Demagun edozein argitalpenek gure datu-basean geroago identifikatzea ahalbidetuko duen ID bakarra duela, kate bat den izenburua eta zenbaki osoko ordena bat duela. Gure diagrama jarraituz, bideratzailea inplementatzen hasiko gara. Gehitu honako kodea index.js fitxategira:

Starting a server in ExpressJS

Hau da gure bideratzailearen fitxategia. Express eta "addPost" metodoa inportatzen ditugu gure kontrolagailutik (hau laster inplementatuko dugu), express router-aren instantzia bat sortu eta addPost metodoa gure bideratzailearekin lotzen dugu, hau da, root bidea eta http dituen eskaera bakoitzeko. "POST" metodoa, "addPost" metodoa deituko da hura kudeatzeko.

Gure metodoa kontrolagailuan inplementatu aurretik, bideratzaile berriari erreferentzia egiten diogu gure app.js fitxategi nagusian, eta bere bidea "/posts" gisa zehazten dugu: zehaztutako bideak dituzten ibilbide guztiak bideratzaile honetara birbidaliko dira, kudeatu ahal izateko. kontrolagailu metodo ezberdinen bidez:

Starting a server in ExpressJS

Bideratzailea inportatzen dugu eta "mezuak" izendatzen dugu. app.use ("/posts",..) esan nahi du "/posts" azpibidea duten eskaera guztiak, edozein dela ere beren http metodoa, zehaztutako bideratzailera bideratuko direla.

App.js-en egindako beste aldaketa batzuk honako hauek dira: datu-basearen konfigurazio-fitxategia inportatzea exekutatu ahal izateko, eta express.json() middleware gisa erabiltzea eskaeraren gorputz-objektuan sartzeko aukera izan dezagun.

Orain gure ibilbideak ezarrita daudenez, "addPost" metodoa gehi dezakegu controller.js fitxategian:

Starting a server in ExpressJS

"addPost" eskaera, erantzun objektuak eta hurrengo funtzioa parametro gisa hartzen dituen middleware funtzio bat da. Hurrengo funtzioari deitzen zaionean, prozesua kateko hurrengo middlewarera joango da, edo eskaera amaituko da. Metodoaren kodean, izenburua eta ordena eskaeraren gorputzetik ateratzen ditugu, eta parametro gisa pasatzen ditugu "createPost" zerbitzu-funtzioari. Funtzio honek argitalpenaren atributuak hartzen ditu, mezu berri bat sortzen du eta itzultzen du. Argitalpen berria sortu ondoren, bezeroari itzultzen diogu 200 egoera-kodearekin batera, hau da, eskaera arrakastatsua izan da. Baliteke gure kodea try/catch bloke baten barruan sartzen dela ustekabeko erroreak atzemateko eta hurrengo middlewarera pasatzeko. Praktika onentzat jotzen da bideratzaile guztiei erroreak kudeatzeko middleware bat eranstea, errorea ateratzen duena eta bezeroari errore-mezu esanguratsu bat itzultzen diona.

Orain falta dena "createPost" funtzioa service.js-en ezartzea da:

nodejs_6

Lehen aipatu dugun bezala, arkitekturaren geruza desberdinak azaltzean, zerbitzu-geruzak datuak biltegiratzeko soluzioarekin elkarreragiten du ORM/ODM erabiliz. Hala ere, gure adibidean, ez dugu aparteko ORMrik erabili beharko, Lowdb-k Javascript-erako euskarri integratua baitator. Bere sintaxiari buruzko xehetasun guztiak dokumentazioa atalean aurki daitezke.

"createPost" metodoak izenburua eta ordena jasotzen ditu parametro gisa, eta bidalketa objektua sortzeko erabiltzen ditu. Id esklusiborako, "nanoid" izeneko liburutegi dedikatu bat erabiltzen dugu, karaktere-sekuentzia berezia sortzen duena. Post berria datu-baseko mezuen array-ra gehitzen dugu eta aldaketa hauek idazten ditugu; gero, mezu berria funtzioak itzultzen du.

Orain "createPost" prest dagoela, argitalpenak gehitzeko eginbidea amaitu eta martxan dago. Postman erabiliz probatzen dugu, APIak probatzeko tresna ezaguna:

nodejs_7

"POST" hautatzen dugu eskaerarako http metodo gisa "localhost:3000/posts" zehaztutako url bidearekin batera. Izenburua eta ordena json formatuan gehitzen ditugu gorputz atalean, eta eskaera bidaltzen dugu. Goian erakusten den bezala, 200 OK egoera jasoko dugu sortu berri den mezuarekin batera.

Ondorioa

Proiektu honetan kontzeptu eta ideia asko aztertu dira: gure proiektuaren ingurunea nola instalatu eta konfiguratu azaldu dugu, LowDB nola konfiguratzen ikasi dugu tokiko datuen iraunkortasunerako, NodeJS/Express backend aplikazioen arkitektura orokorra aztertu eta nola egin ikusi dugu. aplikatu adibide sinple batean. Azkenik, gure aplikazioa probatu dugu Postman erabiliz.

Hemen asmoa backend aplikazio modernoak eraikitzeko dagoen guztiaren bertsio sinplifikatu bat azalaraztea zen. Lehen ikusi dugun bezala, NodeJs tresna indartsua da, API sinple eta konplexuak eraikitzeko aukera ematen diguna. Markoen ekosistema aberatsarekin konbinatuta, esate baterako, express eta ia edozein erabilera-kasutarako tresna eta liburutegi ugarirekin konbinatuta, backend modernoaren garapenerako irtenbide zilegi bat da, ikastea eta menperatzea gomendatzen dugun irtenbidea.



Career Services background pattern

Lanbide Zerbitzuak

Contact Section background image

Jarrai gaitezen harremanetan

Code Labs Academy © 2024 Eskubide guztiak erreserbatuta.