Node.js on avatud lähtekoodiga JavaScripti käitusaeg, mis on üles ehitatud Chrome'i v8 mootorile, mis võimaldab JavaScripti koodi käitada väljaspool brauserit.
Selle sündmusemudel, ökosüsteem ja kiirus on muutnud Node.js-i serveripoolsete rakenduste jaoks üheks ihaldatuimaks ja kasutatavamaks käituskeskkonnaks.
Enamik Node.js API servereid kasutab Expressi või mõnda muud raamistikku. Siiski saate mõne sammuga luua ka lihtsa Node.js API ilma raamistikuta.
1. samm: arenduskeskkonna seadistamine
Loo projektikataloog ja cd sellesse käivitades:
mkdir nodejs-api
cd nodejs-api
Järgmiseks initsialiseerige npm oma projektis, käivitades:
npm init -y
See CRUD API kasutab NoSQL-i andmebaasi MongoDB ja selle populaarset ODM-i, mongoose.
Käivitage installimiseks järgmine käsk mangust:
npm installida mangust
Järgmisena looge a server.js faili oma projekti juurkataloogi ja lisage serveri loomiseks allolev koodiplokk:
konst http = nõuda("http");
konst server = http.createServer((req, res) => {});
server.listen (3000, () => {
konsool.log("Server töötab".);
});
See koodiplokk impordib http-mooduli, mis on Node.js-i põhimoodul. http-moodul võimaldab Node.js-il andmeid HTTP kaudu edastada. See moodul sisaldab serveri loomiseks vajalikke meetodeid.
Järgmisena kutsub see välja http-mooduli looServer meetod, mis loob ja tagastab serveri eksemplari. The looServer meetod võtab parameetritena tagasihelistamisfunktsiooni koos päringu ja vastuse objektiga.
Järgmisena kutsub kood välja kuulake meetod tagastatud serveri eksemplaris. See võimaldab serveril hakata antud pordi liiklust kuulama. The kuulake meetod käivitab õnnestumisel tagasihelistamise – teise argumendi.
Lõpuks looge kaks nimega kataloogi marsruute ja mudelid oma projekti juurkataloogis. The marsruute kaust sisaldab teie API marsruutimise loogikat, samas mudel sisaldab kõike andmebaasiga seonduvat.
2. samm: rakenduse ühendamine andmebaasiga
sisse server.js, importida mangust:
konst mangust = nõuda("mongoose");
Helistage ühendada meetod sisse lülitatud mangust ja edastage argumendina oma MongoDB URI:
mongoose.connect("MongoDB_URI")
3. samm: API mudeli loomine
Looge lihtsa ajaveebirakenduse jaoks CRUD API. Sinu mudelid kaust, loo a blogModel.js faili ja lisage oma failile järgmine kood:
konst mangust = nõuda("mongoose");
konst blogSchema = mangust. Skeem({
pealkiri: {
tüüp: String,
nõutav: [tõsi, "Blogil peab olema pealkiri"],
},
keha: {
tüüp: String,
nõutav: [tõsi, "Blogil peab olema keha"],
},
});
moodul.eksporti = mongoose.model("Blogi", ajaveebiskeem);
Ülaltoodud koodiplokk loob kahe atribuudiga mongoose mudeli ja kaardistab need MongoDB andmebaasi.
Mõlemal selle mudeli omadusel on a String kirjuta koos nõutud seatud tõsi. Kui päringu keha ei sisalda kumbagi atribuuti, kuvatakse kaasnevad veateated.
Viimane rida loob ja ekspordib mongoose mudeli, helistades mudel meetod sisse lülitatud mangust. Edastage mudeli nimi (Blogi) esimese argumendina ja skeemina (ajaveebiskeem) teise argumendina.
4. samm: marsruutimise rakendamine oma rakenduses
Ilma abita raamistikud nagu Express, peate iga teie API-le tehtud päringu käsitlemiseks käsitsi looma loogika.
Esiteks looge a blogRoutes.js faili oma marsruute kausta, seejärel importige ajaveebi mudel:
konst Blogi = nõuda(../models/blogModel");
Järgmisena looge asünkroonne ruuter funktsioon, pass req ja res parameetritena ja eksportige funktsioon:
konst ruuter = asünkrfunktsiooni (req, res) {};
moodul.eksporti = ruuter;
See funktsioon sisaldab kogu teie marsruutimisloogikat.
Järgmisena rakendate marsruutimisloogika marsruudi kaupa.
HANGI marsruute
Lisage allolev koodiplokk oma ruuter funktsioon rakendamiseks SAADA marsruudi töötleja päringute jaoks, mis on tehtud /api/blogs:
// HANGI: /api/blogs
if (req.url "/api/blogs"&& nõutav meetod "SAADA") {
// hanki kõik blogid
konst blogid = ootama Blog.find();// seatud a olek kood jasisu-tüüp
res.writeHead (200, { "Sisu tüüp": "rakendus/json" });
// andmete saatmine
res.lõpp(JSON.Stringify(ajaveebid));
}
Ülaltoodud koodiplokk kontrollib url ja meetod päringuobjekti omadused. Seejärel hangib see andmebaasist kõik ajaveebid rakenduse kaudu leida meetod mongoose mudelil (Blogi).
Järgmisena kutsub see üles kirjutapea meetod sisse lülitatud res, vastuseobjekt. See meetod saadab vastuse päise, millel on kolm argumenti: olekukood, valikuline olekuteade ja päised. The 200 olekukood tähistab edukat vastust ja selle API kutse sisutüüp on seatud rakendus/json.
Lõpuks sulgege päring tagamaks, et server ei hanguks, helistades numbrile lõpp meetod sisse lülitatud res. Kõne aadressile JSON.stringify teisendab ajaveebid vastu JSON-stringile ja edastab selle lõpp meetod tagastab selle vastuse kehana.
Lisage allolev koodiplokk oma ruuter funktsioon rakendamiseks SAADA marsruudi töötleja ühe ressursi jaoks:
// HANGI: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && nõutav meetod "SAADA") {
proovige {
// eraldage id URL-ist
const id = req.url.split("/")[3];// hankige ajaveeb DB-st
konst blogi = ootama Blog.findById (id);
if (blogi) {
res.writeHead (200, { "Sisu tüüp": "rakendus/json" });
res.lõpp(JSON.Stringify(ajaveebi));
} muidu {
viskamauusViga("Blogi pole olemas");
}
} püüda (viga) {
res.writeHead (404, { "Sisu tüüp": "rakendus/json" });
res.lõpp(JSON.Stringify({ sõnum: viga }));
}
}
See kood kasutab vaste meetod, mis võtab argumendina regexi avaldise, et kontrollida, kas URL vastab vormingule: /api/blogs/.
Järgmisena ekstraheerige id vara alates url stringi, kutsudes seda poolitatud meetod. See meetod võtab argumendina mustri (/), poolitab stringi mustri alusel ja tagastab massiivi. Selle massiivi kolmas element on id.
Lõpuks leidke sobivusega dokument id oma andmebaasist. Kui see on olemas, saatke a vastuse kood 200, sulgege päring ja saatke allalaaditud ajaveeb. Kui seda ei ole, visake tõrge ja saatke see vastusena püüdmisplokki.
POSTIMISE marsruut
Selle rakendamiseks lisage oma ruuteri funktsioonile allolev koodiplokk POSTITA marsruudi haldur:
// POSTITUS: /api/blogs/
if (req.url "/api/blogs"&& nõutav meetod "POSTITA") {
proovige {
lase keha = "";// Andmesündmuse kuulamine
req.on("andmeid", (tükk) => {
body += chunk.toString();
});// Kuulake lõppsündmus
req.on("lõpp", asünkroon () => {
// Loo blogi
lase blogi = uus Blogi(JSON.parse (keha));
// Salvesta DB-sse
ootama blogi.save();
res.writeHead (200, { "Sisu tüüp": "rakendus/json" });
res.lõpp(JSON.Stringify(ajaveebi));
});
} püüda (viga) {
konsool.log (viga);
}
}
Päringuobjekt rakendab Node.js ReadableStream liides. See voog kiirgab a andmeid ja an lõpp sündmus, mis annab teile juurdepääsu päringuorgani andmetele.
See kood kuulab andmesündmust ja käsitleb seda, teisendades selle stringiks ja ühendades selle keha muutuv. Aastal lõpp sündmuste käitleja, loob see a Blogi näide parsitud kehastringiga. Seejärel salvestab see uue ajaveebi, saadab olekukoodi ja sisu päise ning sulgeb päringu.
PAN marsruut
Selle rakendamiseks lisage oma ruuteri funktsioonile allolev koodiplokk PANGE marsruudi haldur:
// PANGE: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && nõutav meetod "PANGE") {
proovige {
// eraldage id URL-ist
const id = req.url.split("/")[3];
lase keha = "";req.on("andmeid", (tükk) => {
body += chunk.toString();
});
req.on("lõpp", asünkroon () => {
// Otsi ja värskendadadokument
lase updatedBlog = ootama Blog.findByIdAndUpdate (id, JSON.parse (keha), {
uus: tõsi,
});
res.writeHead (200, { "Sisu tüüp": "rakendus/json" });
res.lõpp(JSON.Stringify(uuendatudBlogi));
});
} püüda (viga) {
konsool.log (viga);
}
}
PUT-päringu töötleja on peaaegu identne POSTITA päringu töötleja, välja arvatud see, et see ekstraheerib id vara alates url vastava ajaveebi värskendamiseks.
KUSTUTA marsruut
Oma ruuteri funktsiooni rakendamiseks lisage allolev koodiplokk KUSTUTA marsruudi haldur:
// KUSTUTA: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && nõutav meetod "KUSTUTA") {
proovige {
const id = req.url.split("/")[3];
// Kustuta ajaveebi alates DB
ootama Blog.findByIdAndDelete (id);
res.writeHead (200, { "Sisu tüüp": "rakendus/json" });
res.end (JSON.stringify({ sõnum: "Blogi kustutamine õnnestus" }));
} püüda (viga) {
res.writeHead (404, { "Sisu tüüp": "rakendus/json" });
res.lõpp(JSON.Stringify({ sõnum: viga }));
}
}
See koodiplokk ekstraktib id alates url, kustutab sobiva dokumendi id, saadab olekukoodi ja päised ning sulgeb päringu.
Lõpuks importige ruuter sinus server.js faili ja helistage oma ruuter funktsioon, läbimine req ja res argumentidena:
konst ruuter = nõuda(./routes/blogRoutes");
konst server = http.createServer((req, res) => {
ruuter (req, res);
});
See võimaldab teie serveril päringuid õigesti pealt kuulata ja käsitleda.
Valminud projekti leiate siit GitHubi hoidla.
Node.js raamistiku kasutamine
Kuigi veebi API-liidest on võimalik käsitsi luua, võib see olla keeruline ülesanne. Peate veenduma, et olete katnud palju servajuhtumeid ja teie kood peaks olema veavaba.
Aastate jooksul on arendajad selle palju lihtsamaks muutmiseks loonud selliseid raamistikke nagu ExpressJS, NestJS, Fastify jne.