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ěží`);
});

instagram viewer

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šší.