Node.js je open-source JavaScriptový runtime postavený na enginu Chrome v8, který umožňuje spouštět JavaScriptový kód mimo prohlížeč.
Díky modelu událostí, ekosystému a rychlosti je Node.js jedním z nejžádanějších a nejpoužívanějších běhových prostředí pro aplikace na straně serveru.
Většina serverů Node.js API používá Express nebo jiný framework. Můžete však také vytvořit jednoduché Node.js API bez frameworku v několika krocích.
Krok 1: Nastavení vývojového prostředí
Vytvořte adresář projektu a CD do toho spuštěním:
mkdir nodejs-api
CD nodejs-api
Dále inicializujte npm ve vašem projektu spuštěním:
npm init -y
Toto CRUD API bude obsahovat použití MongoDB, databáze NoSQL, a její populární ODM, mongoose.
Pro instalaci spusťte následující příkaz mangusta:
npm Nainstalujte mangusta
Dále vytvořte a server.js soubor v kořenovém adresáři vašeho projektu a přidáním bloku kódu níže vytvořte server:
konst http = vyžadovat("http");
konst server = http.createServer((req, res) => {});
server.listen (3000, () => {
řídicí panel.log(`Server běží`);
});
Tento blok kódu importuje modul http, základní modul Node.js. Modul http umožňuje Node.js přenášet data přes HTTP. Tento modul obsahuje metody potřebné k vytvoření serveru.
Dále zavolá modul http createServer metoda, která vytvoří a vrátí instanci serveru. The createServer metoda přebírá funkci zpětného volání s objektem požadavku a odpovědi jako parametry.
Dále kód zavolá poslouchat metoda na vrácené instanci serveru. To umožňuje serveru začít naslouchat provozu na daném portu. The poslouchat metoda spustí zpětné volání – druhý argument – když uspěje.
Nakonec vytvořte dva pojmenované adresáře trasy a modely v kořenovém adresáři vašeho projektu. The trasy složka bude obsahovat logiku směrování pro vaše API, zatímco Modelka bude obsahovat vše, co souvisí s databází.
Krok 2: Připojení vaší aplikace k databázi
v server.js, import mangusta:
konst mangusta = vyžadovat("mangusta");
Zavolej připojit metoda zapnuta mangusta a předejte svůj MongoDB URI jako argument:
mongoose.connect("MongoDB_URI")
Krok 3: Vytvoření modelu API
Vytvořte CRUD API pro jednoduchou blogovou aplikaci. Ve vašem modely složku, vytvořte a blogModel.js soubor a přidejte do svého souboru následující kód:
konst mangusta = vyžadovat("mangusta");
konst blogSchema = mangusta. Schéma({
název: {
typ: Tětiva,
požadované: [pravda, "Blog musí mít název"],
},
tělo: {
typ: Tětiva,
požadované: [pravda, "Blog musí mít tělo"],
},
});
modul.exportů = mongoose.model("Blog", blogSchema);
Výše uvedený blok kódu vytvoří model mongoose se dvěma vlastnostmi a namapuje je na databázi MongoDB.
Obě vlastnosti v tomto modelu mají a Tětiva typ s Požadované nastaven na skutečný. Pokud tělo požadavku neobsahuje žádnou z vlastností, zobrazí se doprovodné chybové zprávy.
Poslední řádek vytvoří a exportuje model mongoose voláním Modelka metoda zapnuta mangusta. Předejte název modelu (Blog) jako první argument a schéma (blogSchema) jako druhý argument.
Krok 4: Implementace směrování ve vaší aplikaci
Bez pomoci frameworky jako Express, budete muset ručně vytvořit logiku pro zpracování každého požadavku na vaše API.
Nejprve vytvořte a blogRoutes.js soubor ve vašem trasy složku a poté importujte model blogu:
konst Blog = vyžadovat(../models/blogModel");
Dále vytvořte asynchronní router funkce, průchod req a res jako parametry a exportujte funkci:
konst router = asynchronnífunkce (req, req) {};
modul.exportů = router;
Tato funkce bude obsahovat veškerou vaši logiku směrování.
Dále implementujete směrovací logiku trasu po trase.
ZÍSKEJTE trasy
Přidejte blok kódu níže do svého router funkce k implementaci DOSTAT obslužný program směrování pro požadavky odeslané na /api/blogs:
// GET: /api/blogs
if (req.url "/api/blogs"&& požadovaná metoda "DOSTAT") {
// získat všechny blogy
konst blogy = čekat Blog.find();// soubor a postavení kód aobsah-typ
res.writeHead (200, { "Typ obsahu": "aplikace/json" });
// odeslání dat
res.konec(JSON.stringovat(blogy));
}
Blok kódu výše kontroluje url a metoda vlastnosti objektu požadavku. Poté načte všechny blogy z databáze prostřednictvím nalézt metoda na modelu mongoose (Blog).
Dále volá psátHead metoda zapnuta res, objekt odpovědi. Tato metoda odešle hlavičku odpovědi se třemi argumenty: stavový kód, volitelná stavová zpráva a hlavičky. The 200 stavový kód představuje úspěšnou odpověď a typ obsahu pro toto volání API je nastaven na aplikace/json.
Nakonec zavřete požadavek, abyste se ujistili, že server nezamrzne voláním konec metoda zapnuta res. Výzva k JSON.stringify převádí blogy objekt na řetězec JSON a předat jej do konec metoda jej vrátí jako tělo odpovědi.
Přidejte blok kódu níže do svého router funkce k implementaci DOSTAT obslužný program trasy pro jeden zdroj:
// GET: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && požadovaná metoda "DOSTAT") {
Snaž se {
// extrahujte id z url
const id = req.url.split("/")[3];// získat blog z DB
konst blog = čekat Blog.findById (id);
if (blog) {
res.writeHead (200, { "Typ obsahu": "aplikace/json" });
res.konec(JSON.stringovat(blog));
} jiný {
házetNovýChyba("Blog neexistuje");
}
} úlovek (chyba) {
res.writeHead (404, { "Typ obsahu": "aplikace/json" });
res.konec(JSON.stringovat({ zpráva: chyba }));
}
}
Tento kód používá zápas metoda, která jako argument používá výraz regulárního výrazu, aby zkontrolovala, zda adresa URL odpovídá formátu: /api/blogs/.
Dále extrahujte id majetek z url řetězec voláním jeho rozdělit metoda. Tato metoda bere jako argument vzor (/), rozdělí řetězec na základě vzoru a vrátí pole. Třetím prvkem tohoto pole je id.
Nakonec načtěte dokument se shodou id z vaší databáze. Pokud existuje, pošlete a kód odpovědi 200, zavřete požadavek a odešlete načtený blog. Pokud neexistuje, vyvolá chybu a pošle ji jako odpověď v bloku catch.
POST Trasa
Přidejte blok kódu níže do funkce směrovače, abyste implementovali POŠTA obsluhovač trasy:
// POST: /api/blogs/
if (req.url "/api/blogs"&& požadovaná metoda "POŠTA") {
Snaž se {
nechat tělo = "";// Poslech datové události
req.on("data", (kus) => {
tělo += chunk.toString();
});// Poslouchejte konecudálost
req.on("konec", async () => {
// Vytvořit blog
nechat blog = Nový Blog(JSON.parse (tělo));
// Uložit do DB
čekat blog.save();
res.writeHead (200, { "Typ obsahu": "aplikace/json" });
res.konec(JSON.stringovat(blog));
});
} úlovek (chyba) {
řídicí panel.log (chyba);
}
}
Objekt požadavku implementuje Node.js ReadableStream rozhraní. Tento proud vydává a data a konec událost, která vám umožní přístup k datům z těla požadavku.
Tento kód naslouchá datové události a zpracovává ji převedením na řetězec a zřetězením do tělo variabilní. V konec obsluha události, vytvoří a Blog instance s analyzovaným řetězcem těla. Poté uloží nový blog, odešle stavový kód a záhlaví obsahu a zavře požadavek.
Cesta PUT
Přidejte blok kódu níže do funkce směrovače, abyste implementovali DÁT obsluhovač trasy:
// PUT: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && požadovaná metoda "DÁT") {
Snaž se {
// extrahujte id z url
const id = req.url.split("/")[3];
nechat tělo = "";req.on("data", (kus) => {
tělo += chunk.toString();
});
req.on("konec", async () => {
// Najít a Aktualizacedokument
nechat aktualizovanýBlog = čekat Blog.findByIdAndUpdate (id, JSON.parse (body), {
Nový: skutečný,
});
res.writeHead (200, { "Typ obsahu": "aplikace/json" });
res.konec(JSON.stringovat(aktualizovanýBlog));
});
} úlovek (chyba) {
řídicí panel.log (chyba);
}
}
Obslužná rutina požadavku PUT je téměř identická s POŠTA obsluha požadavku, kromě toho, že extrahuje soubor id majetek z url aktualizovat příslušný blog.
ODSTRANIT trasu
Přidejte blok kódu níže do funkce směrovače, abyste mohli implementovat svou VYMAZAT obsluhovač trasy:
// VYMAZAT: /api/blogs/:id
if (req.url.match(/\\/api\\/blogs\\/([0-9]+)/) && požadovaná metoda "VYMAZAT") {
Snaž se {
const id = req.url.split("/")[3];
// Vymazat blog z DB
čekat Blog.findByIdAndDelete (id);
res.writeHead (200, { "Typ obsahu": "aplikace/json" });
res.end (JSON.stringify({ zpráva: "Blog byl úspěšně smazán" }));
} úlovek (chyba) {
res.writeHead (404, { "Typ obsahu": "aplikace/json" });
res.konec(JSON.stringovat({ zpráva: chyba }));
}
}
Tento blok kódu extrahuje id z url, smaže dokument s odpovídající id, odešle stavový kód a záhlaví a zavře požadavek.
Nakonec import router ve vašem server.js soubor a zavolejte svému router funkce, průchod req a res jako argumenty:
konst router = vyžadovat(./routes/blogRoutes");
konst server = http.createServer((req, res) => {
router (req, res);
});
To vašemu serveru umožňuje zachycovat a náležitě zpracovávat požadavky.
Hotový projekt najdete v tomto úložiště GitHub.
Použití rámce Node.js
I když je možné vytvořit webové API ručně, může to být obtížný úkol. Budete se muset ujistit, že jste pokryli spoustu okrajových případů a váš kód by měl být bez chyb.
V průběhu let vývojáři vytvořili frameworky jako ExpressJS, NestJS, Fastify atd., aby to bylo mnohem jednodušší.