Inleiding tot NodeJs

nodejs
javascript
bediener
Inleiding tot NodeJs cover image

Inleiding

Wanneer jy probeer om te leer oor die web

ontwikkeling, vind ons gewoonlik dat front-end aansienlik meer toeganklik is as back-end. Daar is baie redes hiervoor, veral die gevoel van onmiddellike terugvoer wat kom van die verandering van 'n sekere element van 'n bladsy in die kode, en die sien van die verandering wat op die webwerf toegepas word. Hierdie terugvoer is dikwels nuttig vir beginners, want dit stel hulle in staat om hul kode aan te pas en uit hul foute te leer. Ongelukkig is dit nie die geval met die backend nie: dikwels word 'n aansienlike hoeveelheid werk gewy aan die opstel van die omgewing vooraf, en die installering van die afhanklikhede wat nodig is om 'n eenvoudige "Hallo Wêreld"-boodskap op die terminaal te laat verskyn., word daar voortdurend baie vordering gemaak in die oopbrongemeenskap om die ontwikkelingsproses van raamwerke te vergemaklik, en die verbetering van die ontwikkelaar se ervaring is 'n goeie voorbeeld hiervan kode in Javascript gerieflik, en bied 'n verskeidenheid van ingeboude gereedskap en kenmerke wat dit onderskei van sy mededingers. In hierdie artikel sal ons NodeJs en sy ekosisteem, met 'n praktiese benadering, die bou van 'n ten volle funksionele projek.

Wat sal ons bou?

ToDo-toepassings is 'n go-to-projek vir beginners wat aan die voorkant-ontwikkeling leer. Dit is hoekom ons besluit het om 'n Todo list API te bou. Dit sal ons in staat stel om databestendigheid by ons koppelvlak te voeg, en ons die vermoë gee om hierdie data te manipuleer (deur by te voeg, op te dateer, todos uit te vee, ens...).

Die finale kode kan gevind word hier.

Ons gereedskap

Ons sal 'n vereenvoudigde tegnologiestapel vir hierdie projek gebruik. Dit kan beskou word as 'n minimale weergawe van baie gereedskap wat jy in werklike projekte sal vind, die rede daarvoor is dat die hoërvlak-idees dieselfde is. Die besonderhede van implementering en keuse van 'n spesifieke instrument bo 'n ander is nie belangrik om te begin nie.

  • NodeJs, soos ons genoem het, is een van die gewildste Javascript-raamwerke vir die bou van toepassings aan die bedienerkant.

  • ExpressJs is 'n minimale Javascript-raamwerk wat bo-op NodeJS gebruik word. Dit versnel die ontwikkelingsproses deur baie ingeboude funksies te gebruik. Dit word ook gebruik as 'n manier om die ontwikkelingspraktyke in NodeJS-projekte te standaardiseer om die gebruik daarvan vir ingenieurs te vergemaklik.

  • LowDB is 'n eenvoudige in-geheue databasis. Die eenvoud daarvan stel ons in staat om te wys hoe om met 'n databasis in 'n NodeJs-projek te kommunikeer, sonder om meer gevorderde onderwerpe soos ontplooiings en konfigurasies te hanteer.

Noudat ons al die gereedskap geïdentifiseer het wat ons sal gebruik, kom ons gaan na ons sleutelborde en begin kodering!

Installasie

Node is beskikbaar op alle platforms. Alle installasiegidse kan gevind word op die amptelike webwerf. Windows-gebruikers moet seker maak dat hulle node pad na omgewingsveranderlikes byvoeg sodat dit op die opdragreël gebruik kan word.

Ons sal ook npm moet installeer. Npm is die standaard pakketbestuurder vir NodeJs. Dit sal ons in staat stel om ons projekafhanklikhede te bestuur. Die installasiegids kan [hier] gevind word (https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).

Projekinisialisering

Gaan na die skakel en kloon die beginprojek:

Dit is 'n eenvoudige aanvangsbewaarplek vir ons projek. Dit bevat al die afhanklikhede wat ons saam met die projeklêerstruktuur sal gebruik. Ons sal elke element verduidelik sodra dit bereik is. Maak jou terminale oop, navigeer na die pad van die projek en voer die opdrag uit:

npm install

Dit sal al die afhanklikhede van die projek wat in die package.json-lêer gespesifiseer word, installeer. package.json is die lêer wat by die wortel van enige Javascript/NodeJs-projek gevind word, dit bevat metadata oor laasgenoemde en word gebruik om alle projekafhanklikhede, skrifte en weergawes te bestuur.

Nadat alle afhanklikhede geïnstalleer is, kan ons ons toepassing begin:

npm run start

"begin" is 'n skrif wat ons in die pakket gespesifiseer het. json lêer. Dit spesifiseer die inskrywingslêer vir ons aansoek, wat in ons geval app.js is.

Die volgende boodskap behoort nou in jou terminaal te verskyn:

nodejs_1

Dit beteken dat ons bediener suksesvol begin het, en luister vir enige versoeke wat na poort 3000 gestuur word. Kom ons kyk na app.js en verduidelik wat hier gebeur:

nodejs_2

App.js is ons projekinskrywingslêer (en die enigste een op hierdie stadium). Ons instansieer 'n uitdruklike toepassing genaamd toepassing, spesifiseer dat alle versoeke wat die http-metode "GET" en die subpad '/' het deur hierdie roete hanteer sal word, deur 'n funksie genaamd 'n middelware, wat die versoek- en reaksie-objek inneem as parameters. Dit is van kardinale belang, aangesien die versoek al die inligting bevat wat nodig is om dit te hanteer (parameters, versoekliggaam, versoekopskrifte, ens.), en die antwoordobjek is die een wat aan die kliënt teruggestuur sal word. Ons begin deur net die "Hallo wêreld" boodskap te stuur. Daarna laat ons ons toepassing luister na enige inkomende versoeke na die poort wat gespesifiseer is (in ons geval 3000), en teken die boodskap "Luister na poort 3000" aan om aan te dui dat ons toepassing aan die gang is en gereed is om versoeke te ontvang.

Maak jou terminale oop en tik "localhost:3000/" in die skakelbalk in en druk Enter. Dit is die gespesifiseerde pad wat ons kan gebruik om ons bediener plaaslik te bereik. Jy sal die volgende boodskap ontvang:

nodejs_3

Databasiskonfigurasie

Lowdb is 'n oopbron-databasis wat maklik is om te gebruik, en vereis geen spesifieke opstelling nie. Die algemene idee daaragter is om alle data in 'n plaaslike json-lêer te stoor. Nadat LowDB geïnstalleer is (wat gedoen is toe ons al die afhanklikhede geïnstalleer het), kan ons die volgende kode by db.js voeg:

nodejs_4

Hierdie kode is baie soortgelyk aan die een wat op LowDB se amptelike dokumentasie gevind word. Ons het dit 'n bietjie aangepas vir ons eie gebruiksgeval. Kom ons verduidelik dit reël vir reël:

Die eerste paar reëls is vir die invoer van die nodige afhanklikhede. "join" is 'n nutsfunksie wat beskikbaar is in die "pad"-module. Dit is een van die kernmodules van NodeJs wat baie metodes bied om paaie te hanteer en te hanteer. "Low" en "JSONFile'' is die twee klasse wat deur LowDB blootgestel word. Die eerste een skep die json-lêerinstansie wat ons data sal bevat. Die tweede een skep die werklike databasis-instansie wat daarop sal reageer. Laastens, "lodash" is een van die mees gebruikte javascript-biblioteke wat 'n wye verskeidenheid nutsfunksies vir algemene programmeringstake bied. Ons voeg dit by ons databasisinstansie om ons in staat te stel om sy gevorderde metodes te gebruik om ons data te hanteer.

Eerstens spesifiseer ons die pad vir die db.json-lêer. Dit is die lêer wat ons data sal bevat en na LowDB oorgedra sal word. As die lêer nie by die gespesifiseerde pad gevind word nie, sal LowDB een skep.

Ons gee dan die lêerpad na die LowDB-adapter deur en gee dit aan ons nuwe LowDB-databasisinstansie. Die "db" veranderlike kan dan gebruik word om met ons databasis te kommunikeer. Sodra die databasis-instansie geskep is, lees ons uit die json-lêer deur db.read() te gebruik. Dit sal die "data"-veld in ons databasis-instansie stel sodat ons toegang tot die databasis-inhoud kan kry. Let daarop dat ons hierdie reël met "wag" voorafgegaan het. Dit is om te spesifiseer dat hierdie instruksie 'n onbekende hoeveelheid tyd kan neem om op te los, en dat die NodeJs-proses moet wag vir die uitvoering daarvan voordat voortgaan met die res van die kode. Ons doen dit omdat die leesbewerking geheuetoegang tot die gespesifiseerde lêer vereis, en die tyd om hierdie soort bewerking uit te voer hang af van jou masjienspesifikasies.

Noudat ons toegang tot die dataveld het, stel ons dit as 'n objek wat 'n leë reeks plasings bevat, of liewer, ons kyk of die lêer enige vorige data bevat en stel die leë skikking as dit nie die geval is nie.

Laastens voer ons db.write() uit om die wysigings wat ons aan die data gemaak het toe te pas, en voer die databasisinstansie uit sodat dit in ander lêers in ons projek gebruik kan word.

Algemene Versoek/Reaksie werkvloei

Oorweeg die volgende diagram:

nodejs_5

Dit toon die algemene argitektuur wat toegepas word in 'n oorvloed backend-toepassings wat met NodeJs/Express gebou is. Om die algemene werkvloei agter die hantering van 'n versoek te verstaan, sal jou nie net toelaat om NodeJ se toepassings te bou en te struktureer nie, maar jou ook in staat stel om hierdie konsepte na feitlik enige tegniese stapel van jou keuse oor te dra. Ons sal die verskillende lae wat met hierdie proses inmeng ondersoek en hul rolle verduidelik:

## HTTP-versoeklaag

Dit is die eerste laag in ons toepassing, stel dit voor as 'n poort wat 'n wye reeks verskillende versoeke ontvang wat van verskillende kliënte af kom, elke versoek word dan ontleed en na die toegewyde deel van die toepassing aangestuur sodat dit hanteer kan word.

  • Roeteerders: hier verwys ons na Express-routers, maar hierdie konsep kan in baie backend-raamwerke gevind word. Roeteerders is 'n manier om die logiese verspreiding in ons besigheidslogika op ons kode toe te pas, wat beteken dat elke stel elemente wat soortgelyke kenmerke deel, deur dieselfde inskrywing hanteer word en van die res van die stelle geskei kan word. Dit het die voordeel dat dit elke komponent van die kode onafhanklik van die ander maak, en makliker is om te onderhou en uit te brei. Meer spesifiek, en as 'n voorbeeld, sal alle versoeke wat aan voorwaardes van die gedeelde url-pad "/posts" voldoen, deur dieselfde router hanteer word. Afhangende van hul http-metode (GET, POST, ens..), sal 'n ander kontroleerder gebruik word.

  • Beheerders: 'n beheerder ontvang gefiltreerde versoeke van routers, pas bykomende verwerking toe en roep die geskikte diensmetodes.

Besigheidslogika-laag

Hierdie laag is uniek, afhangende van die spesifieke gebruiksgevalle van die toepassing, en die besigheidslogika daaragter.

  • Dienste: Dienste is 'n stel metodes wat die kernlogika van die toepassing bevat. Hulle het ook interaksie met die databasis deur die gebruik van ORMs/ODMs.).

  • Derdepartydienste: baie moderne toepassings kies om 'n deel van die toepassing se logika te delegeer na toegewyde dienste wat toeganklik is deur 'n API. Dienste van hierdie soort kan betalingshanteringsdienste, stoor van statiese lêers, kennisgewings en ander wees.

  • ODM/ORM: ORM'e en ODM'e tree op as middelmanne tussen die dienste en die databasis. Hul rol is om 'n hoëvlak-abstraksie op 'n databasis te verskaf wat 'n ontwikkelaar in staat stel om kode in die programmeertaal van hul keuse te skryf in plaas van toegewyde databasistale, soos SQL.

Data Persistentie Laag

  • Databasisse: soos ons vroeër genoem het, benodig byna alle toepassings een of ander vorm van databestendigheid. Hierdie deel word deur databasisse hanteer, en afhangende van die aard van die data, die besigheidslogika en vele ander oorwegings, word die keuse van 'n sekere databasis bo 'n ander as deurslaggewend beskou vir die doeltreffendheid en die skaalbaarheid van die toepassing.

Voorbeeld: Voeg 'n plasing by

Noudat ons die algemene idee agter die argitektuur verstaan, kom ons pas dit toe op ons eenvoudige voorbeeld. Ons sal die kenmerk implementeer om 'n taakpos by ons toepassing te voeg. Kom ons neem aan dat enige plasing 'n unieke id het wat ons in staat sal stel om dit later in ons databasis te identifiseer, 'n titel wat 'n string is, en 'n volgorde wat van die tipe heelgetal is. Na aanleiding van ons diagram, sal ons begin deur die router te implementeer. Voeg die volgende kode by die index.js-lêer:

Starting a server in ExpressJS

Dit is ons router-lêer. Ons voer express en die “addPost” metode van ons kontroleerder af (ons sal hierdie een binnekort implementeer), skep 'n instansie van express router, en bind die addPost metode aan ons router - wat beteken dat vir elke versoek wat die wortelpad en die http het metode "POST", sal die "addPost" metode genoem word om dit te hanteer.

Voordat ons ons metode in die beheerder implementeer, verwys ons na die nuwe roeteerder in ons hoof app.js-lêer, en spesifiseer sy pad as "/posts": Alle roetes met die gespesifiseerde paaie sal na hierdie roeteerder aangestuur word, sodat dit hanteer kan word deur die verskillende beheermetodes:

Starting a server in ExpressJS

Ons voer die router in en noem dit as "posts". app.use(“/posts”,..) beteken dat alle versoeke met die subpad “/posts”, ongeag hul http-metode, na die gespesifiseerde router gestuur sal word.

Ander veranderinge aan app.js sluit in die invoer van die databasiskonfigurasielêer sodat dit uitgevoer kan word, en die gebruik van die express.json() as 'n middelware om ons in staat te stel om toegang tot die versoekliggaamvoorwerp te verkry.

Noudat ons roetes ingestel is, kan ons die “addPost”-metode in die controller.js-lêer byvoeg:

Starting a server in ExpressJS

"addPost" is 'n middelware-funksie wat die versoek, reaksie-objekte en die volgende funksie as parameters neem. Wanneer die volgende funksie geroep word, sal die proses na die volgende middelware in die ketting beweeg, of die versoek beëindig. In die metode se kode onttrek ons ​​die titel en die bestelling uit die versoekliggaam, en gee dit as parameters deur na die diensfunksie "createPost". Hierdie funksie neem die plasingskenmerke, skep 'n nuwe plasing en gee dit terug. Sodra die nuwe pos geskep is, stuur ons dit terug aan die kliënt saam met die 200-statuskode, wat beteken dat die versoek suksesvol was. Jy mag dalk sien dat ons kode binne 'n probeer/vang blok geplaas word om enige onverwagte fout op te vang, en dit na die volgende middelware deur te gee. Dit word as beste praktyk beskou om 'n middelware vir fouthantering aan alle routers te koppel wat die fout onttrek en 'n betekenisvolle foutboodskap aan die kliënt terugstuur.

Al wat nou oorbly, is om die "createPost"-funksie in service.js te implementeer:

nodejs_6

Soos ons vroeër genoem het toe ons die verskillende lae van die argitektuur verduidelik het, is die dienslaag in wisselwerking met die databergingsoplossing deur die gebruik van ORM/ODM. In ons voorbeeld hoef ons egter nie 'n aparte ORM te gebruik nie, aangesien Lowdb met ingeboude ondersteuning vir Javascript kom. Alle besonderhede oor sy sintaksis kan gevind word in die dokumentasie.

Die "createPost"-metode ontvang titel en volgorde as parameters, en gebruik dit om die post-objek te skep. Vir die unieke ID gebruik ons ​​'n toegewyde biblioteek genaamd "nanoïde", wat 'n unieke reeks karakters genereer. Ons voeg die nuwe pos by die poste-skikking in die databasis, en skryf hierdie veranderinge; die nuwe pos word dan deur die funksie teruggestuur.

Noudat "createPost" gereed is, is die funksie om plasings by te voeg, nou klaar en aan die gang. Ons toets dit met Postman, 'n gewilde instrument om API's te toets:

nodejs_7

Ons kies "POST" as die http-metode vir die versoek saam met die gespesifiseerde url-pad "localhost:3000/posts". Ons voeg die titel en die volgorde as json-formaat in die liggaamsafdeling by en stuur die versoek. Soos hierbo getoon, ontvang ons die 200 OK-status saam met die nuutgeskepte pos.

Gevolgtrekking

Baie konsepte en idees is in hierdie projek ondersoek: Ons het gedek hoe om ons projekomgewing te installeer en op te stel, geleer hoe om LowDB op te stel vir plaaslike data-volharding, die algemene argitektuur van NodeJS/Express backend-toepassings ondersoek en gesien hoe om pas dit toe in 'n eenvoudige voorbeeld. Uiteindelik het ons ons toepassing met Postman getoets.

Die bedoeling hier was om 'n vereenvoudigde weergawe van alles wat in die bou van moderne backend-toepassings gaan, bloot te lê. Soos ons vroeër gesien het, is NodeJs 'n kragtige instrument wat ons in staat stel om eenvoudige en komplekse API's te bou. Gekombineer met sy ryk ekosisteem van raamwerke, soos uitdruklike en 'n oorvloed van gereedskap en biblioteke vir omtrent enige gebruiksgeval, is dit 'n wettige oplossing vir moderne backend-ontwikkeling - 'n oplossing wat ons aanbeveel om te leer en te bemeester.


Career Services background pattern

Loopbaandienste

Contact Section background image

Kom ons bly in kontak

Code Labs Academy © 2024 Alle regte voorbehou.