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.
MAKEUSEOF A NAP VIDEÓJA
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 :
miért nem szól az üzenetem, hogy kézbesítették?
npm install mongoose
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 = require("http");
const server = http.createServer((req, res) => {});
server.listen(3000, () => {
console.log(`Server is running`);
});
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 mongoose = require("mongoose");
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 mongoose = require("mongoose");
const blogSchema = mongoose.Schema({
title: {
type: String,
required: [true, "Blog must have a title"],
},
body: {
type: String,
required: [true, "Blog must have a body"],
},
});
module.exports = 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 ( blogSchedule ) 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 = require("../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 = async function (req, res) {};
module.exports = 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 === "GET") {
// get all blogs
const blogs = await Blog.find();
// set the status code and content-type
res.writeHead(200, { "Content-Type": "application/json" });
// send data
res.end(JSON.stringify(blogs));
}
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.
hogyan lehet internetet szerezni laptopon wifi nélkül
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 === "GET") {
try {
// extract id from url
const id = req.url.split("/")[3];
// get blog from DB
const blog = await Blog.findById(id);
if (blog) {
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
} else {
throw new Error("Blog does not exist");
}
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}
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") {
try {
let body = "";
// Listen for data event
req.on("data", (chunk) => {
body += chunk.toString();
});
// Listen for end event
req.on("end", async () => {
// Create Blog
let blog = new Blog(JSON.parse(body));
// Save to DB
await blog.save();
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(blog));
});
} catch (error) {
console.log(error);
}
}
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") {
try {
// extract id from url
const id = req.url.split("/")[3];
let body = "";
req.on("data", (chunk) => {
body += chunk.toString();
});
req.on("end", async () => {
// Find and update document
let updatedBlog = await Blog.findByIdAndUpdate(id, JSON.parse(body), {
new: true,
});
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify(updatedBlog));
});
} catch (error) {
console.log(error);
}
}
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ő:
// DELETE: /api/blogs/:id
if (req.url.match(/\/api\/blogs\/([0-9]+)/) && req.method === "DELETE") {
try {
const id = req.url.split("/")[3];
// Delete blog from DB
await Blog.findByIdAndDelete(id);
res.writeHead(200, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: "Blog deleted successfully" }));
} catch (error) {
res.writeHead(404, { "Content-Type": "application/json" });
res.end(JSON.stringify({ message: error }));
}
}
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 = require("./routes/blogRoutes");
const server = http.createServer((req, res) => {
router(req, res);
});
Ez lehetővé teszi, hogy a szerver elfogja és megfelelően kezelje a kéréseket.
nem tudja megváltoztatni az energiaterv ablakokat 10
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.