Deno je jednoduchý a bezpečný runtime pro JavaScript, který ve výchozím nastavení podporuje a konfiguruje TypeScript. MongoDB je multiplatformní databázový program orientovaný na dokumenty, který je široce používán vývojáři. V tomto článku se naučíme, jak integrovat MongoDB do naší aplikace Deno.
Předpoklady
- Znalost TypeScript
- VS Code nebo jakýkoli editor kódu nainstalovaný na vašem vývojovém počítači.
- Základní znalost MongoDB.
- POSTMAN nainstalován na místním počítači.
Než začneme, ujistěte se, že máte na svém místním počítači nainstalovaný Deno. Pokud používáte Mac a ještě jej nemáte nainstalovaný, otevřete terminál a spusťte tento příkaz:
brew install deno
Pokud používáte počítač se systémem Windows, můžete jej nainstalovat spuštěním tohoto příkazu na vašem terminálu:
iwr https://deno.land/x/install/install.ps1 -useb | iex
Nebo, pokud máte nainstalovanou Chocolatey, můžete spustit:
choco install deno
Začínáme
Začneme vytvořením server.js
soubor a poté nastavte náš server Deno. Protože neexistuje žádný package.json
jako máme v Node.js, Deno používá odkaz na moduly pomocí URL nebo cest k souboru.
import { Application, Router } from "https://deno.land/x/oak/mod.ts"; const app = new Application(); const router = new Router(); const PORT = 3000; router .get("/", (ctx) => { ctx.response.body = "This is the home route"; }); app.use(router.routes()); app.use(router.allowedMethods()); app.listen({ port: PORT });
Pro provoz našeho serveru používáme Oak. Oak je middlewarový framework Deno pro HTTP servery a zahrnuje také middleware routeru.
Nyní můžeme spustit deno run --allow-net server.ts
na našem terminálu, aby obsluhoval naši aplikaci. Kvůli zabezpečení společnosti Deno musíme přidat --allow-net
provozovat server. Aplikaci můžeme vyhledat v našem prohlížeči na localhost:8000
.
Nyní, když je náš server v provozu, můžeme začít nastavovat MongoDB v naší aplikaci. Vytvořte db.js
soubor, kde nastavíme naši konfiguraci DB:
// import the package from url import { init, MongoClient } from "https://deno.land/x/[email protected]/mod.ts"; // Intialize the plugin await init(); // Create client const client = new MongoClient(); // Connect to mongodb client.connectWithUri("mongodb://localhost:27017"); // Give your database a name const dbname: string = "denoMongoApp"; const db = client.database(dbname); // Declare the mongodb collections here. Here we are using only one collection (i.e user). // Defining schema interface interface UserSchema { _id: { $oid: string }; name: string; email: string; phone: string; } const User = db.collection<UserSchema>("user"); export { db, User };
Zde naimportujeme plugin a následně jej inicializujeme. Vytvoříme instanci mongoClient
a poté jej připojte k MongoDB. Nastavili jsme User
kolekce, kterou použijeme k testování naší konfigurace Mongo. Také definujeme rozhraní TypeScript pro model MongoDB, které bude mít jméno, e-mail, telefon a vygenerované Mongo ID.
Nyní, když je toto nastaveno, vytvoříme jednoduchou aplikaci CRUD, abychom to otestovali. Aby byla naše aplikace škálovatelnější, musíme vytvořit routes.ts
a controller.ts
soubor. Naše routes.ts
soubor bude zpracovávat naše trasy a controller.ts
soubor zvládne naši MongoDB logiku.
Naše routes.ts
soubor by měl vypadat takto:
import { Router } from "https://deno.land/x/oak/mod.ts"; import { getUsers, createUser } from "./controller.ts"; const router = new Router(); router .get("/", (ctx) => { ctx.response.body = "This is the home route"; }) .get("/get-users", getUsers) .post("/create-user", createUser); export default router;
S touto novou konfigurací musíme upravit naše server.ts
soubor do tohoto:
import { Application } from "https://deno.land/x/oak/mod.ts"; const app = new Application(); import router from "./routes.ts"; const PORT: number = 3000; // app.use(router.routes()); app.use(router.allowedMethods()); app.listen({ port: PORT });
Nyní potřebujeme definovat naše metody směrování, které jsme zavolali v router.ts
soubor. Začneme vytvořením getUser
metoda. Pamatujte, že musíme přinést instanci naší databáze, kterou jsme vytvořili v db.ts
soubor:
import { User } from "./db.ts"; let getUsers = async (ctx: any) => { try { const data: any = await User.find(); ctx.response.body = { "status": true, data: data }; ctx.response.status = 200; } catch (err) { ctx.response.body = { status: false, data: null }; ctx.response.status = 500; console.log(err); } };
Nyní můžeme zavolat get-user
koncový bod, který ve výchozím nastavení vrátí prázdné pole a stav 200
.
Stejnou techniku použijeme k implementaci createUser
metoda:
let createUser = async (ctx: any) => { try { let body: any = await ctx.request.body(); console.log(await body.value); const { name, phone, email } = await body.value; const id = await User.insertOne({ name: name, phone: phone, email: email, }); ctx.response.body = { status: true, data: id }; ctx.response.status = 201; } catch (err) { ctx.response.body = { status: false, data: null }; ctx.response.status = 500; console.log(err); } };
Nezapomeňte vždy počkat na body.value
, protože se jedná o asynchronní požadavek. Pokud to neuděláte, vrátí pouze ID objektu.
Spusťte aplikaci:
Další skvělé články od LogRocket:
- Nenechte si ujít ani okamžik s The Replay, kurátorským zpravodajem společnosti LogRocket
- Použijte useEffect React k optimalizaci výkonu vaší aplikace
- Přepínání mezi více verzemi Node
- Naučte se animovat aplikaci React pomocí AnimXYZ
- Prozkoumejte Tauri, nový rámec pro vytváření binárních souborů
- Porovnejte NestJS vs. Express.js
- Objevte oblíbené ORM používané v prostředí TypeScript
deno run --allow-all --unstable server.ts
--allow-all
příznak povolí všechna oprávnění a deaktivuje zabezpečení společnosti Deno v naší aplikaci.
Testujeme naše koncové body
Pojďme do toho a otestujte naše koncové body pomocí POSTMAN. Zde je test pro získání uživatelů:
A zde je test pro vytvoření uživatele:
Závěr
Nastavení aplikace v Deno je celkem snadné a bezpečnější. Můžete použít jakoukoli databázi dle vašeho výběru, pokud pro ni existuje ovladač Deno. Vzhledem k tomu, že Deno nemá package.json
ukládá všechny moduly do mezipaměti na našem místním počítači, což je mnohem rychlejší.