Johdatus NodeJ:ihin

nodejs
javascript
palvelin
Johdatus NodeJ:ihin cover image

Johdanto

Kun yrität oppia webistä

kehitysvaiheessa huomaamme yleensä, että käyttöliittymä on huomattavasti helpommin saavutettavissa kuin tausta. Tälle on monia syitä, erityisesti välitön palautteen tunne, joka syntyy, kun sivun tiettyä elementtiä muutetaan koodissa ja huomataan verkkosivustoon kohdistuva muutos. Tämä palaute on usein hyödyllistä aloittelijoille, koska sen avulla he voivat säätää koodiaan ja oppia virheistään. Valitettavasti näin ei tapahdu taustajärjestelmän kanssa: usein ympäristön määrittämiseen etukäteen ja tarvittavien riippuvuuksien asentamiseen kuluu paljon työtä, jotta päätelaitteeseen tulee yksinkertainen "Hello World" -viesti., avoimen lähdekoodin yhteisössä edistytään jatkuvasti kehyksien kehitysprosessin helpottamiseksi, ja kehittäjän kokemuksen parantaminen on tästä hyvä esimerkki Javascript-koodi on kätevä ja tarjoaa erilaisia ​​sisäänrakennettuja työkaluja ja ominaisuuksia, jotka erottavat sen kilpailijoistaan. Tässä artikkelissa tutkimme NodeJ:tä ja sen ekosysteemiä käytännönläheisellä lähestymistavalla ja rakentaen täysin toimivan projektin.

Mitä rakennamme?

ToDo-sovellukset ovat aloittelijoille tarkoitettu projekti, joka oppii etupään kehitystä. Tästä syystä päätimme rakentaa Todo list API:n. Tämä antaa meille mahdollisuuden lisätä tietojen pysyvyyttä käyttöliittymäämme ja antaa meille mahdollisuuden käsitellä näitä tietoja (lisäämällä, päivittämällä, poistamalla tehtäviä jne.).

Lopullinen koodi löytyy täältä.

Työkalumme

Käytämme tässä projektissa yksinkertaistettua tekniikkapinoa. Sitä voidaan pitää minimaalisena versiona monista tosielämän projekteista löytyvistä työkaluista, mikä johtuu siitä, että korkeamman tason ideat ovat samat. Toteutuksen yksityiskohdat ja tietyn työkalun valinta toiseen verrattuna eivät ole tärkeitä aloittamisen kannalta.

  • NodeJs, kuten mainitsimme, on yksi suosituimmista Javascript-kehyksistä palvelinpuolen sovellusten rakentamiseen.

  • ExpressJs on minimaalinen Javascript-kehys, jota käytetään NodeJS:n päällä. Se nopeuttaa kehitysprosessia käyttämällä monia sisäänrakennettuja ominaisuuksia. Sitä käytetään myös tapana standardoida NodeJS-projektien kehityskäytäntöjä helpottaakseen sen käyttöä insinööreille.

  • LowDB on yksinkertainen muistissa oleva tietokanta. Sen yksinkertaisuus antaa meille mahdollisuuden esitellä, kuinka olla vuorovaikutuksessa tietokannan kanssa NodeJs-projektissa käsittelemättä edistyneempiä aiheita, kuten käyttöönottoja ja määrityksiä.

Nyt kun olemme tunnistaneet kaikki työkalut, joita käytämme, siirrytään näppäimistöihimme ja aloitetaan koodaus!

Asennus

Node on saatavilla kaikilla alustoilla. Kaikki asennusohjeet löytyvät virallisesta verkkosivustosta. Windows-käyttäjien tulee muistaa lisätä solmu polku ympäristömuuttujiin, jotta sitä voidaan käyttää komentorivillä.

Tarvitsemme myös npm:n asennettuna. Npm on NodeJ:n vakiopakettien hallinta. Sen avulla voimme hallita projektiriippuvuuksiamme. Asennusopas löytyy täältä.

Projektin alustus

Siirry linkkiin ja kloonaa aloitusprojekti:

Tämä on yksinkertainen aloitusarkisto projektillemme. Se sisältää kaikki riippuvuudet, joita käytämme yhdessä projektitiedostorakenteen kanssa. Selitämme jokaisen elementin saavutettuaan. Avaa terminaali, siirry projektin polkuun ja suorita komento:

npm install

Tämä asentaa kaikki paketti.json-tiedostossa määritetyn projektin riippuvuudet. package.json on tiedosto, joka löytyy minkä tahansa Javascript/NodeJs-projektin juuresta, se sisältää metatietoja jälkimmäisestä ja sitä käytetään kaikkien projektiriippuvuuksien, komentosarjojen ja versioiden hallintaan.

Kun kaikki riippuvuudet on asennettu, voimme käynnistää sovelluksemme:

npm run start

"aloitus" on skripti, jonka määritimme paketissa. json tiedosto. Se määrittää sovelluksemme aloitustiedoston, joka meidän tapauksessamme on app.js.

Seuraavan viestin pitäisi nyt näkyä terminaalissasi:

nodejs_1

Tämä tarkoittaa, että palvelimemme käynnistyi onnistuneesti ja kuuntelee kaikkia porttiin 3000 lähetettyjä pyyntöjä. Katsotaanpa app.js-tiedostoa ja selitetään, mitä täällä tapahtuu:

nodejs_2

App.js on projektimme syöttötiedosto (ja ainoa tällä hetkellä). Instantoimme pikasovelluksen nimeltä app, määritämme, että kaikki pyynnöt, joilla on http-menetelmä "GET" ja alipolku "/", käsitellään tällä reitillä, välitämme väliohjelmistoksi kutsutun toiminnon, joka vastaanottaa pyyntö- ja vastausobjektin parametrit. Tämä on tärkeää, koska pyyntö sisältää kaikki sen käsittelemiseen tarvittavat tiedot (parametrit, pyynnön runko, pyynnön otsikot jne.), ja vastausobjekti on se, joka palautetaan asiakkaalle. Aloitamme lähettämällä "Hei maailma" -viestin. Sen jälkeen laitamme sovelluksemme kuuntelemaan kaikki saapuvat pyynnöt määritettyyn porttiin (tapauksessamme 3000) ja kirjaamme viestin "Listening to port 3000" osoittamaan, että sovelluksemme on käynnissä ja valmis vastaanottamaan pyyntöjä.

Avaa pääte ja kirjoita linkkipalkkiin "localhost:3000/" ja paina Enter. Tämä on määritetty polku, jonka avulla voimme saavuttaa palvelimemme paikallisesti. Saat seuraavan viestin:

nodejs_3

Tietokannan määritys

Lowdb on avoimen lähdekoodin tietokanta, jota on helppo käyttää, eikä se vaadi erityisiä asetuksia. Sen yleinen idea on tallentaa kaikki tiedot paikalliseen json-tiedostoon. Kun LowDB on asennettu (mikä on tehty, kun asensimme kaikki riippuvuudet), voimme lisätä seuraavan koodin db.js:iin:

nodejs_4

Tämä koodi on melko samanlainen kuin LowDB:n virallisessa dokumentaatiossa oleva koodi. Muokkasimme sitä hieman omaan käyttöön. Selitetään se rivi riviltä:

Ensimmäiset rivit ovat tarvittavien riippuvuuksien tuontia varten. "join" on "polku"-moduulissa käytettävissä oleva aputoiminto. Se on yksi NodeJ:n ydinmoduuleista, joka tarjoaa monia menetelmiä polkujen käsittelyyn ja käsittelyyn. "Low" ja "JSONFile" ovat kaksi LowDB:n paljastamaa luokkaa. Ensimmäinen luo json-tiedostoesiintymän, joka sisältää tietomme. Toinen luo varsinaisen tietokannan ilmentymän, joka toimii sen mukaan. Lopuksi "lodash" on yksi eniten käytetyistä javascript-kirjastoista, joka tarjoaa laajan valikoiman aputoimintoja yleisiin ohjelmointitehtäviin. Lisäämme sen tietokantaesiintymään, jotta voimme käyttää sen edistyneitä menetelmiä tietojen käsittelyyn.

Ensin määritetään db.json-tiedoston polku. Se on tiedosto, joka sisältää tietomme ja välitetään LowDB:lle. Jos tiedostoa ei löydy määritetystä polusta, LowDB luo sellaisen.

Välitämme sitten tiedostopolun LowDB-sovittimelle ja välitämme sen uudelle LowDB-tietokantaesiintymällemme. ”db”-muuttujaa voidaan sitten käyttää kommunikoimaan tietokantaamme. Kun tietokantailmentymä on luotu, luemme json-tiedostosta komennolla db.read(). Tämä asettaa "data"-kentän tietokantaesiintymään, jotta voimme käyttää tietokannan sisältöä. Huomaa, että edellimme tätä riviä "odota". Tämä määrittää, että tämän käskyn ratkaiseminen voi kestää tuntemattoman kauan ja että NodeJ-prosessin on odotettava sen suorittamista ennen kuin jatkat koodin muun osan kanssa. Teemme tämän, koska lukutoiminto vaatii muistin pääsyn määritettyyn tiedostoon, ja tällaisen toiminnon suorittamiseen kuluva aika riippuu koneen teknisistä tiedoista.

Nyt kun meillä on pääsy tietokenttään, asetamme sen objektiksi, joka sisältää tyhjän viestijoukon, tai pikemminkin tarkistamme, sisältääkö tiedosto aiempia tietoja ja asetamme tyhjän taulukon, jos se ei ole niin.

Lopuksi suoritamme komennon db.write() tehdäksemme tietoihin tekemämme muutokset ja viemme tietokannan ilmentymän, jotta sitä voidaan käyttää muissa projektimme tiedostoissa.

Yleinen pyyntö/vastaus -työnkulku

Harkitse seuraavaa kaaviota:

nodejs_5

Se näyttää yleisen arkkitehtuurin, jota käytetään lukuisissa NodeJs/Expressillä rakennetuissa taustasovelluksissa. Pyynnön käsittelyn taustalla olevan yleisen työnkulun ymmärtäminen ei mahdollista vain NodeJ-sovellusten rakentamista ja jäsentämistä, vaan myös näiden käsitteiden siirtämistä käytännöllisesti katsoen mihin tahansa valitsemaasi tekniseen pinoon. Tutkimme eri tasoja, jotka häiritsevät tätä prosessia, ja selitämme niiden roolit:

## HTTP-pyyntötaso

Tämä on sovelluksemme ensimmäinen kerros. Kuvittele se yhdyskäytävänä, joka vastaanottaa laajan valikoiman erilaisia ​​pyyntöjä eri asiakkailta. Jokainen pyyntö analysoidaan ja välitetään sovelluksen omistettuun osaan, jotta se voidaan käsitellä.

  • Reitittimet: tässä tarkoitamme Express-reitittimiä, mutta tämä käsite löytyy monista taustajärjestelmistä. Reitittimet ovat tapa soveltaa liiketoimintalogiikkamme loogista jakautumista koodiimme, mikä tarkoittaa, että jokaista elementtijoukkoa, jolla on samanlaiset ominaisuudet, käsitellään samalla tiedolla ja ne voidaan erottaa muista joukoista. Tämän etuna on, että jokainen koodin komponentti on riippumaton muista ja helpompi ylläpitää ja laajentaa. Tarkemmin sanottuna ja esimerkkinä, kaikki pyynnöt, jotka täyttävät jaetun url-polun "/posts" ehdot, käsitellään samassa reitittimessä. Riippuen niiden http-menetelmästä (GET, POST jne..), käytetään eri ohjainta.

  • Ohjaimet: ohjain vastaanottaa suodatettuja pyyntöjä reitittimistä, käyttää lisäkäsittelyä ja kutsuu sopivia palvelumenetelmiä.

Business Logic Layer

Tämä kerros on ainutlaatuinen riippuen sovelluksen erityisistä käyttötapauksista ja sen takana olevasta liiketoimintalogiikasta.

  • Palvelut: Palvelut ovat joukko menetelmiä, jotka sisältävät sovelluksen ydinlogiikan. Ne ovat myös vuorovaikutuksessa tietokannan kanssa käyttämällä ORMs/ODMs.).

  • Kolmannen osapuolen palvelut: monet nykyaikaiset sovellukset päättävät delegoida osan sovelluksen logiikasta omistetuille palveluille, jotka ovat käytettävissä API:n kautta. Tällaisia ​​palveluita voivat olla maksujen käsittelypalvelut, staattisten tiedostojen tallennus, ilmoitukset ja muut.

  • ODM/ORM: ORM:t ja ODM:t toimivat välittäjinä palvelujen ja tietokannan välillä. Niiden tehtävänä on tarjota korkean tason abstraktio tietokannasta, jonka avulla kehittäjä voi kirjoittaa koodia valitsemallaan ohjelmointikielellä omistettujen tietokantakielten, kuten SQL:n, sijaan.

Tietojen pysyvyyskerros

  • Tietokannat: kuten aiemmin mainitsimme, lähes kaikki sovellukset tarvitsevat jonkinlaista tietojen pysyvyyttä. Tätä osaa käsittelevät tietokannat, ja riippuen tietojen luonteesta, liiketoimintalogiikasta ja monista muista näkökohdista, tietyn tietokannan valintaa toisen sijaan pidetään ratkaisevana sovelluksen tehokkuuden ja skaalautuvuuden kannalta.

Esimerkki: Viestin lisääminen

Nyt kun ymmärrämme arkkitehtuurin takana olevan yleisen idean, sovelletaan sitä yksinkertaiseen esimerkkiimme. Otamme käyttöön ominaisuuden lisätä todo-viesti sovellukseemme. Oletetaan, että millä tahansa viestillä on yksilöllinen tunnus, jonka avulla voimme tunnistaa sen myöhemmin tietokannassamme, otsikko, joka on merkkijono, ja järjestys, jonka tyyppi on kokonaisluku. Kaaviomme mukaisesti aloitamme toteuttamalla reitittimen. Lisää seuraava koodi index.js-tiedostoon:

Starting a server in ExpressJS

Tämä on reititintiedostomme. Tuomme express- ja "addPost"-menetelmän ohjaimestamme (otamme tämän käyttöön pian), luomme pikareitittimen ilmentymän ja sitomme addPost-menetelmän reitittimeemme - mikä tarkoittaa, että jokaiselle pyynnölle, jolla on juuripolku ja http menetelmä "POST", "addPost" -menetelmä kutsutaan käsittelemään sitä.

Ennen kuin otamme käyttöön menetelmämme ohjaimessa, viittaamme uuteen reitittimeen pääapp.js-tiedostossamme ja määritämme sen polun muodossa "/posts": Kaikki reitit, joilla on määritetyt polut, välitetään tälle reitittimelle, jotta sitä voidaan käsitellä. eri ohjausmenetelmillä:

Starting a server in ExpressJS

Tuomme reitittimen ja nimeämme sen "viesteiksi". app.use("/posts",...) tarkoittaa, että kaikki pyynnöt, joiden alipolku on "/posts", riippumatta niiden http-menetelmästä, reititetään määritettyyn reitittimeen.

Muita app.js:n muutoksia ovat tietokannan määritystiedoston tuominen sen suorittamiseksi ja express.json():n käyttäminen väliohjelmistona, jotta voimme käyttää pyynnön runkoobjektia.

Nyt kun reitit on asetettu, voimme lisätä "addPost"-menetelmän controller.js-tiedostoon:

Starting a server in ExpressJS

"addPost" on väliohjelmistotoiminto, joka ottaa parametreiksi pyynnön, vastausobjektit ja seuraavan toiminnon. Kun seuraava toiminto kutsutaan, prosessi siirtyy ketjun seuraavaan väliohjelmistoon tai lopettaa pyynnön. Poimimme menetelmän koodissa otsikon ja järjestyksen pyynnön rungosta ja välitämme ne parametreina palvelutoimintoon "createPost". Tämä toiminto ottaa postattribuutit, luo uuden viestin ja palauttaa sen. Kun uusi viesti on luotu, palautamme sen asiakkaalle 200 tilakoodin kanssa, mikä tarkoittaa, että pyyntö on onnistunut. Saatat huomata, että koodimme on sijoitettu try/catch-lohkoon odottamattomien virheiden havaitsemiseksi ja sen välittämiseksi seuraavalle väliohjelmistolle. Parhaaksi käytännöksi katsotaan liittää kaikkiin reitittimiin virheenkäsittelyn väliohjelmisto, joka purkaa virheen ja palauttaa asiakkaalle merkityksellisen virhesanoman.

Nyt ei ole enää jäljellä kuin toteuttaa "createPost"-toiminto service.js:ssä:

nodejs_6

Kuten aiemmin mainitsimme selitettäessä arkkitehtuurin eri kerroksia, palvelukerros on vuorovaikutuksessa tiedontallennusratkaisun kanssa ORM/ODM:n avulla. Esimerkissämme meidän ei kuitenkaan tarvitse käyttää erillistä ORM:ää, koska Lowdb:ssä on sisäänrakennettu tuki Javascriptille. Kaikki tiedot sen syntaksista löytyvät dokumentaatiosta.

"createPost" -menetelmä vastaanottaa otsikon ja järjestyksen parametreina ja käyttää niitä post-objektin luomiseen. Ainutlaatuisen tunnuksen saamiseksi käytämme omaa kirjastoa nimeltä "nanoidi", joka luo ainutlaatuisen merkkisarjan. Lisäämme uuden viestin tietokannan posts-taulukkoon ja kirjoitamme nämä muutokset; funktio palauttaa sitten uuden viestin.

Nyt kun "createPost" on valmis, viestien lisääminen on nyt valmis ja käynnissä. Testaamme sitä käyttämällä Postmania, suosittua API-testaustyökalua:

nodejs_7

Valitsemme pyynnön http-menetelmäksi "POST" ja määritetyn url-polun "localhost:3000/posts". Lisäämme otsikon ja tilauksen json-muodossa body-osioon ja lähetämme pyynnön. Kuten yllä näkyy, saamme 200 OK-tilan uuden viestin mukana.

Johtopäätös

Tässä projektissa on tutkittu monia käsitteitä ja ideoita: Kävimme läpi projektiympäristömme asentamisen ja määrittämisen, opimme konfiguroimaan LowDB:n paikallista datan pysyvyyttä varten, tutkimme NodeJS/Express-taustasovellusten yleistä arkkitehtuuria ja näimme kuinka soveltaa sitä yksinkertaisessa esimerkissä. Lopuksi testasimme sovellustamme Postmanilla.

Tarkoituksena oli tuoda esiin yksinkertaistettu versio kaikesta, mitä nykyaikaisten taustasovellusten rakentamiseen kuuluu. Kuten näimme aiemmin, NodeJs on tehokas työkalu, jonka avulla voimme rakentaa yksinkertaisia ​​ja monimutkaisia ​​sovellusliittymiä. Yhdessä sen runsaan ekosysteemin kanssa, kuten express ja lukuisia työkaluja ja kirjastoja lähes kaikkiin käyttötapauksiin, se on legitiimi ratkaisu nykyaikaiseen taustakehitykseen – ratkaisu, jota suosittelemme oppimaan ja hallitsemaan.


Career Services background pattern

Urapalvelut

Contact Section background image

Pidetään yhteyttä

Code Labs Academy © 2024 Kaikki oikeudet pidätetään.