A Node.js egy nyílt forráskódú JavaScript futtatókörnyezet, amely a chrome v8-as motorjára épül, és lehetővé teszi JavaScript-kód böngészőn kívüli futtatását.

Eseménymodellje, ökoszisztémája és sebessége a Node.js-t a szerveroldali alkalmazások egyik legkeresettebb és leggyakrabban használt futási környezetévé tették.

A legtöbb Node.js API-kiszolgáló Expresszt vagy más keretrendszert használ. Azonban néhány lépésben létrehozhat egy egyszerű Node.js API-t keretrendszer nélkül is.

1. lépés: Fejlesztői környezet beállítása

Hozzon létre egy projektkönyvtárat és CD futva bele:

mkdir nodejs-api
CD nodejs-api

Ezután inicializálja npm a projektben a következő futtatással:

npm init -y

Ez a CRUD API a MongoDB, egy NoSQL adatbázis és annak népszerű ODM, a mongoose használatát fogja tartalmazni.

A telepítéshez futtassa a következő parancsot indiai menyét:

npm telepítés indiai menyét

Ezután hozzon létre a server.js fájlt a projekt gyökérkönyvtárába, és a szerver létrehozásához adja hozzá az alábbi kódblokkot:

const http = igényelnek("http");
const szerver = http.createServer((req, res) => {});

server.listen (3000, () => {
konzol.log(`A szerver fut`);
});

Ez a kódblokk importálja a http modult, amely egy központi Node.js modul. A http modul lehetővé teszi a Node.js számára az adatok HTTP-n keresztüli átvitelét. Ez a modul tartalmazza a szerver létrehozásához szükséges módszereket.

Ezután meghívja a http modult CreateServer metódus, amely létrehozza és visszaadja a szerver példányát. Az CreateServer metódus egy visszahívási függvényt vesz fel paraméterként egy kérés és válasz objektummal.

Ezután a kód meghívja a hallgat metódus a visszaadott kiszolgálópéldányon. Ez lehetővé teszi a szerver számára, hogy elkezdje figyelni a forgalmat az adott porton. Az hallgat A metódus sikeres visszahívást indít – a második argumentumot –.

Végül hozzon létre két nevű könyvtárat útvonalak és modellek a projekt gyökérkönyvtárában. Az útvonalak mappa tartalmazza az API útválasztási logikáját, míg modell tartalmaz mindent, ami az adatbázissal kapcsolatos.

2. lépés: Az alkalmazás összekapcsolása egy adatbázissal

Ban ben server.js, import indiai menyét:

const mangúz = igényelnek("indiai menyét");

Hívja a csatlakozni módszer bekapcsolva indiai menyét és adja át a MongoDB URI-ját argumentumként:

mongoose.connect("MongoDB_URI")

3. lépés: API-modell létrehozása

Hozzon létre egy CRUD API-t egy egyszerű blogalkalmazáshoz. A tiédben modellek mappát, hozzon létre a blogModel.js fájlt, és adja hozzá a következő kódot a fájlhoz:

const mangúz = igényelnek("indiai menyét");
const blogSchema = mangúz. Séma({
cím: {
típus: Húr,
kötelező: [igaz, "A blognak címet kell adni"],
},
test: {
típus: Húr,
kötelező: [igaz, "A blognak testnek kell lennie"],
},
});
modult.export = mongoose.model("Blog", blogSchema);

A fenti kódblokk létrehoz egy mongoose modellt két tulajdonsággal, és leképezi őket egy MongoDB adatbázisra.

Ebben a modellben mindkét tulajdonság rendelkezik a Húr írja be kívánt állítva igaz. A kísérő hibaüzenetek megjelennek, ha a kérés törzse nem tartalmazza a tulajdonságok egyikét sem.

Az utolsó sor egy mongúz modellt hoz létre és exportál a következő meghívásával modell módszer bekapcsolva indiai menyét. Add meg a modell nevét (Blog) mint első argumentum és séma (blogSchema) második érvként.

4. lépés: Az útválasztás megvalósítása az alkalmazásban

Segítség nélkül olyan keretrendszerek, mint az Express, akkor manuálisan kell létrehoznia a logikát az API-hoz intézett minden kérés kezeléséhez.

Először hozzon létre a blogRoutes.js fájlt a tiédben útvonalak mappát, majd importálja a blogmodellt:

const Blog = igényelnek(../models/blogModel");

Ezután hozzon létre egy aszinkront router funkció, passz req és res paraméterként, és exportálja a függvényt:

const router = asyncfunkció (req, res) {};
modult.export = router;

Ez a függvény tartalmazza az összes útválasztási logikát.

Ezután meg kell valósítania az útválasztási logikát útvonalonként.

Útvonalak beszerzése

Adja hozzá az alábbi kódblokkot a sajátjához router funkció megvalósításához a KAP címre küldött kérések útvonalkezelője /api/blogs:

// GET: /api/blogs
if (req.url "/api/blogs"&& req.method "KAP") {
// az összes blog letöltése
const blogok = várják Blog.find();

// készlet az állapot kód éstartalom-típus
res.writeHead (200, { "Tartalom típus": "alkalmazás/json" });

// adatok küldése
res.vége(JSON.karikázni(blogok));
}

A fenti kódblokk ellenőrzi a url és módszer a kérés objektum tulajdonságai. Ezután lekéri az összes blogot az adatbázisból a megtalálja módszer a mongúz modellen (Blog).

Ezután a writeHead módszer bekapcsolva res, a válaszobjektum. Ez a metódus válaszfejlécet küld három argumentummal: állapotkóddal, opcionális állapotüzenettel és fejlécekkel. Az 200 Az állapotkód sikeres választ jelent, és ennek az API-hívásnak a tartalomtípusa a következőre van állítva alkalmazás/json.

Végül zárja be a kérést, hogy biztosítsa a kiszolgáló lefagyását a vége módszer bekapcsolva res. A hívás JSON.stringify átalakítja a blogok objektumot egy JSON karakterláncra, és átadja azt a vége metódus választörzsként adja vissza.

Adja hozzá az alábbi kódblokkot a sajátjához router funkció megvalósításához a KAP útvonalkezelő egyetlen erőforráshoz:

// GET: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && req.method "KAP") {
próbálja meg {
// azonosító kibontása az url-ből
const id = req.url.split("/")[3];

// blog beszerzése a DB-től
const blog = várják Blog.findById (id);

if (blog) {
res.writeHead (200, { "Tartalom típus": "alkalmazás/json" });
res.vége(JSON.karikázni(blog));
} más {
dobásújHiba("A blog nem létezik");
}
} fogás (hiba) {
res.writeHead (404, { "Tartalom típus": "alkalmazás/json" });
res.vége(JSON.karikázni({ üzenet: hiba }));
}
}

Ez a kód a mérkőzés metódus, amely egy regex kifejezést vesz fel argumentumként annak ellenőrzésére, hogy az URL egyezik-e a formátummal: /api/blogs/.

Ezután bontsa ki a id ingatlan a url karakterlánc hívásával hasított módszer. Ez a metódus egy mintát vesz fel argumentumként (/), felosztja a karakterláncot a minta alapján, és egy tömböt ad vissza. Ennek a tömbnek a harmadik eleme a id.

Végül kérje le a megfelelő dokumentumot id az adatbázisodból. Ha létezik, küldje el a 200-as válaszkód, zárja be a kérést, és küldje el a letöltött blogot. Ha nem létezik, dobjon egy hibát, és küldje el válaszként a catch blokkban.

POST Útvonal

Adja hozzá az alábbi kódblokkot az útválasztó funkciójához a végrehajtásához POST útvonalkezelő:

// POST: /api/blogs/
if (req.url "/api/blogs"&& req.method "POST") {
próbálja meg {
hadd test = "";

// Adatesemény figyelése
req.on("adat", (darab) => {
body += chunk.toString();
});

// Figyelj rá végeesemény
req.on("vége", aszinkron () => {
// Blog létrehozása
hagyja blog = új Blog(JSON.parse (test));

// Mentés DB-be
várják blog.save();
res.writeHead (200, { "Tartalom típus": "alkalmazás/json" });
res.vége(JSON.karikázni(blog));
});
} fogás (hiba) {
konzol.log (hiba);
}
}

A kérelem objektum megvalósítja a Node.js ReadableStream felület. Ez a patak bocsát ki a adat és egy vége esemény, amely hozzáférést biztosít a kérelmező szervtől származó adatokhoz.

Ez a kód figyeli az adateseményt, és úgy kezeli, hogy karakterláncsá alakítja és összefűzi test változó. Ban,-ben vége eseménykezelő, létrehozza a Blog példány az elemzett törzskarakterlánccal. Ezután elmenti az új blogot, elküldi az állapotkódot és a tartalomfejlécet, és lezárja a kérést.

PUT Route

Adja hozzá az alábbi kódblokkot az útválasztó funkciójához a végrehajtásához PUT útvonalkezelő:

// PUT: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && req.method "PUT") {
próbálja meg {
// azonosító kibontása az url-ből
const id = req.url.split("/")[3];
hadd test = "";

req.on("adat", (darab) => {
body += chunk.toString();
});
req.on("vége", aszinkron () => {
// Keresse meg és frissítésdokumentum
hagyja updatedBlog = várják Blog.findByIdAndUpdate (id, JSON.parse (törzs), {
új: igaz,
});

res.writeHead (200, { "Tartalom típus": "alkalmazás/json" });
res.vége(JSON.karikázni(frissítveBlog));
});
} fogás (hiba) {
konzol.log (hiba);
}
}

A PUT kéréskezelő szinte azonos a POST kéréskezelő, kivéve, hogy kivonja a id ingatlan a url a vonatkozó blog frissítéséhez.

Útvonal törlése

Adja hozzá az alábbi kódblokkot az útválasztó funkciójához, hogy megvalósítsa a sajátját TÖRÖL útvonalkezelő:

// TÖRÖL: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && req.method "TÖRÖL") {
próbálja meg {
const id = req.url.split("/")[3];

// Töröl blog tól től DB
várják Blog.findByIdAndDelete (id);
res.writeHead (200, { "Tartalom típus": "alkalmazás/json" });
res.end (JSON.stringify({ üzenet: "A blog sikeresen törölve" }));
} fogás (hiba) {
res.writeHead (404, { "Tartalom típus": "alkalmazás/json" });
res.vége(JSON.karikázni({ üzenet: hiba }));
}
}

Ez a kódblokk kivonja a id tól url, törli a megfelelő dokumentumot id, elküldi az állapotkódot és a fejléceket, és lezárja a kérést.

Végül az importálás router a tiédben server.js fájlt, és hívja fel router funkció, átadás req és res érvekként:

const router = igényelnek(./routes/blogRoutes");

const szerver = http.createServer((req, res) => {
router (req, res);
});

Ez lehetővé teszi, hogy a szerver elfogja és megfelelően kezelje a kéréseket.

Az elkészült projektet itt találja GitHub adattár.

Node.js-keretrendszer használata

Annak ellenére, hogy kézzel is létrehozható egy webes API, ez nehéz feladat lehet. Győződjön meg arról, hogy sok szélső esetet lefedett, és jobb, ha a kód hibamentes legyen.

Az évek során a fejlesztők olyan keretrendszereket építettek, mint az ExpressJS, a NestJS, a Fastify stb., hogy ezt sokkal könnyebbé tegyék.