Node.js je odprtokodno izvajalno okolje JavaScript, zgrajeno na Chromovem mehanizmu v8, ki omogoča izvajanje kode JavaScript zunaj brskalnika.

Njegov model dogodkov, ekosistem in hitrost so naredili Node.js enega najbolj zaželenih in uporabljanih izvajalnih časov za aplikacije na strani strežnika.

Večina strežnikov API Node.js uporablja Express ali drugo ogrodje. Lahko pa ustvarite tudi preprost API Node.js brez ogrodja v le nekaj korakih.

1. korak: Nastavitev vašega razvojnega okolja

Ustvarite imenik projekta in cd vanj tako, da zaženete:

mkdir nodejs-api
cd nodejs-api

Nato inicializiraj npm v vašem projektu tako, da zaženete:

npm init -y

Ta CRUD API bo vseboval uporabo MongoDB, baze podatkov NoSQL, in njenega priljubljenega ODM, mongoose.

Za namestitev zaženite naslednji ukaz mungos:

npm namestite mungos

Nato ustvarite a server.js datoteko v korenskem imeniku vašega projekta in dodajte spodnji blok kode, da ustvarite strežnik:

konst http = zahtevati("http");
konst strežnik = http.createServer((req, res) => {});

server.listen (3000, () => {
konzola.log(`Strežnik deluje`);
});

instagram viewer

Ta blok kode uvozi modul http, jedrni modul Node.js. Modul http omogoča Node.js prenos podatkov prek HTTP. Ta modul vsebuje metode, potrebne za ustvarjanje strežnika.

Nato pokliče module http createServer metoda, ki ustvari in vrne primerek strežnika. The createServer metoda vzame funkcijo povratnega klica z objektom zahteve in odgovora kot parametroma.

Nato koda pokliče poslušaj metodo na vrnjenem primerku strežnika. To omogoča strežniku, da začne poslušati promet na danih vratih. The poslušaj metoda sproži povratni klic – drugi argument – ​​ko uspe.

Na koncu ustvarite dva imenika z imenom poti in modeli v korenskem imeniku vašega projekta. The poti bo vsebovala logiko usmerjanja za vaš API, medtem ko model bo vseboval vse, kar je povezano z bazo podatkov.

2. korak: Povezovanje aplikacije z zbirko podatkov

notri server.js, uvoz mungos:

konst mungos = zahtevati("mungos");

Pokličite povezati metoda na mungos in posredujte svoj MongoDB URI kot argument:

mongoose.connect("MongoDB_URI")

3. korak: Ustvarjanje modela API

Ustvarite CRUD API za preprosto spletno aplikacijo. V vašem modeli mapo, ustvarite a blogModel.js in svoji datoteki dodajte naslednjo kodo:

konst mungos = zahtevati("mungos");
konst blogSchema = mungos. Shema({
naslov: {
vrsta: Vrvica,
obvezno: [true, "Blog mora imeti naslov"],
},
telo: {
vrsta: Vrvica,
obvezno: [true, "Blog mora imeti telo"],
},
});
modul.izvoz = mongoose.model("Blog", blogSchema);

Zgornji blok kode ustvari model mongoose z dvema lastnostma in ju preslika v bazo podatkov MongoDB.

Obe lastnosti v tem modelu imata a Vrvica tip z potrebno nastavljena prav. Spremljevalna sporočila o napakah se prikažejo, če telo zahteve ne vsebuje nobene od lastnosti.

Zadnja vrstica ustvari in izvozi model mongoose s klicem model metoda na mungos. Posredujte ime modela (Blog) kot prvi argument in shema (blogSchema) kot drugi argument.

4. korak: Implementacija usmerjanja v vaši aplikaciji

Brez pomoči ogrodja, kot je Express, boste morali ročno ustvariti logiko za obravnavo vsake zahteve v vašem API-ju.

Najprej ustvarite a blogRoutes.js datoteko v vašem poti mapo, nato uvozite model bloga:

konst Blog = zahtevati("../modeli/blogModel");

Nato ustvarite asinhrono usmerjevalnik funkcija, pass zahtevano in res kot parametre in izvozite funkcijo:

konst usmerjevalnik = asinhfunkcijo (zahteva, res) {};
modul.izvoz = usmerjevalnik;

Ta funkcija bo vsebovala vso vašo logiko usmerjanja.

Nato boste implementirali logiko usmerjanja pot za potjo.

GET Routes

Dodajte spodnji kodni blok svojemu usmerjevalnik funkcijo za izvajanje DOBITI upravljavec poti za zahteve /api/blogs:

// GET: /api/blogs
če (req.url "/api/blogs"&& zahtevana metoda "DOBITI") {
// pridobi vse bloge
konst blogi = čakati Blog.find();

// set the stanje Koda invsebino-vrsta
res.writeHead (200, { "Vrsta vsebine": "aplikacija/json" });

// pošiljanje podatkov
res.konec(JSON.nizati(blogi));
}

Zgornji blok kode preveri url in metoda lastnosti objekta zahteve. Nato pridobi vse bloge iz baze podatkov prek najti metoda na mungosovem modelu (Blog).

Nato pokliče writeHead metoda na res, objekt odziva. Ta metoda pošlje glavo odgovora s tremi argumenti: statusno kodo, neobvezno statusno sporočilo in glave. The 200 statusna koda predstavlja uspešen odgovor in tip vsebine za ta klic API-ja je nastavljen na aplikacija/json.

Na koncu zaprite zahtevo, da zagotovite, da strežnik ne bo obsojen, tako da pokličete konec metoda na res. Klic na JSON.stringify pretvarja blogi objekt v niz JSON in posredovanje tega v konec metoda ga vrne kot telo odziva.

Dodajte spodnji kodni blok svojemu usmerjevalnik funkcijo za izvajanje DOBITI upravljalnik poti za posamezen vir:

// GET: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && zahtevana metoda "DOBITI") {
poskusi {
// ekstrahiraj ID iz URL-ja
const id = req.url.split("/")[3];

// pridobi blog iz baze podatkov
konst blog = čakati Blog.findById (id);

if (blog) {
res.writeHead (200, { "Vrsta vsebine": "aplikacija/json" });
res.konec(JSON.nizati(blog));
} drugače {
metatinovoNapaka("Blog ne obstaja");
}
} ulov (napaka) {
res.writeHead (404, { "Vrsta vsebine": "aplikacija/json" });
res.konec(JSON.nizati({ sporočilo: napaka }));
}
}

Ta koda uporablja tekma metoda, ki sprejme izraz regularnega izraza kot argument, da preveri, ali se url ujema z obliko: /api/blogs/.

Nato izvlecite id premoženje iz url niz tako, da ga pokličete razdeliti metoda. Ta metoda vzame vzorec kot argument (/), razdeli niz na podlagi vzorca in vrne matriko. Tretji element tega niza je id.

Nazadnje pridobite dokument z ujemanjem id iz vaše baze podatkov. Če obstaja, pošljite a koda odgovora 200, zaprite zahtevo in pošljite pridobljeni blog. Če ne obstaja, sproži napako in jo pošlji kot odgovor v bloku catch.

POST pot

Dodajte spodnji blok kode v funkcijo usmerjevalnika, da implementirate OBJAVI upravljavec poti:

// OBJAVA: /api/blogs/
če (req.url "/api/blogs"&& zahtevana metoda "OBJAVI") {
poskusi {
naj telo = "";

// Poslušaj podatkovni dogodek
req.on("podatke", (kos) => {
telo += chunk.toString();
});

// Poslušaj konecdogodek
req.on("konec", async () => {
// Ustvari spletni dnevnik
pustiti blog = novo blog(JSON.parse (telo));

// Shrani v DB
čakati blog.save();
res.writeHead (200, { "Vrsta vsebine": "aplikacija/json" });
res.konec(JSON.nizati(blog));
});
} ulov (napaka) {
konzola.log (napaka);
}
}

Objekt zahteve implementira Node.js ReadableStream vmesnik. Ta tok oddaja a podatke in an konec dogodek, ki vam omogoči dostop do podatkov iz telesa zahteve.

Ta koda posluša podatkovni dogodek in ga obravnava tako, da ga pretvori v niz in združi v telo spremenljivka. V konec obdelovalnik dogodkov, ustvari a Blog primerek z razčlenjenim telesnim nizom. Nato shrani nov spletni dnevnik, pošlje statusno kodo in glavo vsebine ter zapre zahtevo.

PUT Pot

Dodajte spodnji blok kode v funkcijo usmerjevalnika, da implementirate POSTAVITE upravljavec poti:

// PUT: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && zahtevana metoda "POSTAVITE") {
poskusi {
// ekstrahiraj ID iz URL-ja
const id = req.url.split("/")[3];
naj telo = "";

req.on("podatke", (kos) => {
telo += chunk.toString();
});
req.on("konec", async () => {
// Najdi in nadgradnjadokument
pustiti posodobljen blog = čakati Blog.findByIdAndUpdate (id, JSON.parse (telo), {
novo: prav,
});

res.writeHead (200, { "Vrsta vsebine": "aplikacija/json" });
res.konec(JSON.nizati(posodobljen blog));
});
} ulov (napaka) {
konzola.log (napaka);
}
}

Obravnavalec zahtev PUT je skoraj enak OBJAVI obdelovalnik zahtev, le da ekstrahira id premoženje iz url za posodobitev ustreznega bloga.

IZBRIŠI pot

Spodnji blok kode dodajte funkciji usmerjevalnika, da izvedete svojo IZBRIŠI upravljavec poti:

// IZBRIŠI: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && zahtevana metoda "IZBRIŠI") {
poskusi {
const id = req.url.split("/")[3];

// Izbriši blog od DB
čakati Blog.findByIdAndDelete (id);
res.writeHead (200, { "Vrsta vsebine": "aplikacija/json" });
res.end (JSON.stringify({ sporočilo: "Blog je uspešno izbrisan" }));
} ulov (napaka) {
res.writeHead (404, { "Vrsta vsebine": "aplikacija/json" });
res.konec(JSON.nizati({ sporočilo: napaka }));
}
}

Ta blok kode ekstrahira id Iz url, izbriše dokument z ujemanjem id, pošlje statusno kodo in glave ter zapre zahtevo.

Končno, uvoz usmerjevalnik v tvojem server.js datoteko in pokličite svojega usmerjevalnik funkcija, prehajanje zahtevano in res kot argumenti:

konst usmerjevalnik = zahtevati("./routes/blogRoutes");

konst strežnik = http.createServer((req, res) => {
usmerjevalnik (req, res);
});

To vašemu strežniku omogoča, da prestreže in ustrezno obravnava zahteve.

Dokončan projekt lahko najdete tukaj Repozitorij GitHub.

Uporaba ogrodja Node.js

Čeprav je mogoče ročno ustvariti spletni API, je to lahko težka naloga. Prepričati se boste morali, da ste pokrili veliko robnih primerov in da je bolje, da vaša koda ne vsebuje hroščev.

Z leti so razvijalci zgradili ogrodja, kot so ExpressJS, NestJS, Fastify itd., da bi bilo veliko lažje.