Vytvoření nové webové aplikace využívající architekturu Expressu

Dokončeno

Společnosti často ukládají velké množství dat do systémů souborů a databází. K datům přistupují tak, že je obsluhují prostřednictvím webových aplikací z rozhraní API pomocí protokolu HTTP.

Webové servery a webové aplikace

Webový server je software, který reaguje na požadavky klientů. Webová aplikace se nachází nad webovým serverem. Některá prostředí, jako je Node.js, poskytují webový server i webovou aplikaci v rámci. V tomto modulu je webový server poskytován modulem HTTP . Webová aplikace je poskytována architekturou Express.js a zahrnuje webový server.

Další informace:

  • Webové aplikace: Aplikace doručí webovou aplikaci klientovi:
    • Vizuálně pomocí HTML, CSS a JavaScriptu
    • Data s využitím rozhraní API
    • Vizuál i data s kombinací HTML, CSS, JavaScriptu a rozhraní API. To je považováno za monolitickou aplikaci.
  • Směrování adresy URL: Směrování adresy URL je mechanismus, který poskytuje funkce webového serveru, když se požaduje konkrétní adresa URL. Například adresa URL /products může být přidružená k funkci, která vrací seznam produktů. Adresa URL /products/1 může být přidružená k funkci, která vrací konkrétní produkt.
  • Hlavičky HTTP: Jedná se o páry klíč-hodnota, které se odesílají z klienta na server. Obsahují informace o požadavku nebo odpovědi.
    • Podpora různých typů obsahu: Klient může požadovat data v určitém formátu a může se vracet v tomto formátu, jako je prostý text, JSON, HTML nebo CSV.
    • Ověřování/autorizace: Některá data můžou být citlivá. Uživatel,který chce přistupovat k datům, se bude potřebovat přihlásit nebo musí mít určitou roli nebo stupeň oprávnění. To se zpracovává v hlavičce HTTP.
  • Výměna dat: Uživatelé možná budou muset zobrazit a přidat data do systému. Pokud chcete přidat data, můžou uživatelé zadávat data ve formuláři nebo nahrávat soubory.
  • Čas uvedení na trh: Efektivní vytváření webových aplikací a rozhraní API, zvolte nástroje a architektury, které poskytují řešení běžných problémů. Tyto volby pomáhají vývojáři rychle splnit obchodní požadavky úlohy.

Modul HTTP v Node.js

Node.js obsahuje integrovaný modul HTTP. Jde o relativně malý modul, který dokáže zpracovat většinu typů požadavků. Podporuje běžné typy dat, jako jsou hlavičky, adresa URL a data.

Následující příklad kódu je jednoduchý webový server, který naslouchá příchozím požadavkům na portu 3000. Odpoví na klienta jednoduchou textovou zprávou hello world bez ohledu na použitou trasu adresy URL nebo hlavičky HTTP.

// Include the HTTP module
const http = require('http');

// Set the port to 3000
const PORT = 3000;

// 1. Process incoming requests (req), reply with response (res)
const requestHandler = (req, res) => {

  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('hello world');
}

// 2. Create a server with the requestHandler
const server = http.createServer(requestHandler);

// 3. Start listening for incoming requests on port
server.listen(PORT, () => {
  console.log(`listening on port ${PORT}`)
})

Tento příklad nakonfiguruje webovou aplikaci pomocí následujících kroků:

  1. requestHandler: Funkce přečte požadavek (req) a určí, jaká odpověď (res) se má odeslat.
  2. server: Metoda createServer() je definována obslužnou rutinou požadavku. Protože existuje pouze jedna obslužná rutina požadavku, server vždy odpoví stejnou odpovědí. V reálné aplikaci byste měli více obslužných rutin žádostí pro zpracování různých typů požadavků a různých tras. O tom se budeme podrobněji věnovat později.
  3. server.listen: Metoda listen() je vyvolána se zadaným portem. Po volání listen() metody je server připravený přijímat požadavky klientů. Po spuštění místně bude aplikace dostupná na zařízení http://localhost:3000. Příkaz console.log se spustí, aby vývojář věděl, že server je připravený k použití.

Tento Express.js příklad kódu používá více stylů funkcí:

  • zpětné volání v server.listen(PORT string, callback_function)
  • arrow functionrequestHandler = (req, res) => {} in which has different scope rules than a regular function

architektura Express.js

Zatím jste se seznámili s funkcemi modulu HTTP v Node.js. Jde o velmi vhodnou volbu pro menší webové aplikace. Pokud se aplikace rozrůstá, pomůže vám platforma, jako je Express, vytvořit škálovatelnou architekturu.

Po vytvoření několika webových aplikací si všimnete, že stejné problémy vyřešíte znovu a znovu. K nejčastějším problémům patří správa tras, ověřování, autorizace a správa chyb. V tomto okamžiku začnete hledat architekturu, jako je Express, která řeší některé nebo všechny tyto problémy.

Správa tras v Expressu

Když klient odešle požadavek na webovou aplikaci, použije adresu URL, což je adresa odkazující na konkrétní server. Adresa URL může vypadat takto:

http://localhost:3000/products

Termín localhost v adrese URL odkazuje na váš vlastní počítač. Vhodnější adresa URL pro produkční prostředí možná přepnula termín localhost pro název domény, jako je microsoft.com. Koncová část adresy URL představuje trasu. Rozhoduje o konkrétním logickém místě, které má jít na server. V tomto případě je /productstrasa .

Architektura Expressu používá ke správě tras adresu URL, trasu a příkazy HTTP. Příkazy HTTP, jako postje , puta get popisují akci požadovanou klientem. Každý příkaz HTTP má určitý význam, co se má s daty stát. Express pomáhá registrovat trasy a páruje je s příslušnými příkazy HTTP kvůli uspořádání webové aplikace. Express má vyhrazené metody pro zpracování různých příkazů HTTP a také inteligentní systém přidružování různých tras k různým částem kódu.

V následujícím příkladu vám Express pomůže zpracovat požadavky zaměřené na trasu s adresou /products přidruženou k příkazu getHTTP:

app.get('/products', (req, res) => {
  // handle the request
})

Express vidí rozdíl od app.post výrazu app.get/products for /products, jak je znázorněno v následujícím příkladu kódu:

app.get('/products', (req, res) => {
  // handle the request
})

app.post('/products', (req, res) => {
  // handle the request
})

Příkaz get HTTP znamená, že uživatel chce číst data. Příkaz post HTTP znamená, že chce zapisovat data. Rozdělení aplikace tak, aby různé dvojice tras a sloves spouštěly různé části kódu, jsou společné. Tento koncept bude podrobněji popsán později.

Obsluha různých typů obsahu

Express podporuje řadu různých formátů obsahu, které je možné vrátit volajícímu klientovi. Objekt res obsahuje sadu pomocných funkcí pro vrácení různých typů dat. Pokud chcete vrátit prostý text, použijete metodu send() následujícím způsobem:

res.send('plain text')

U jiných typů dat, jako je JSON, existují vyhrazené metody, které zajistí, že se vytvoří správný typ obsahu a převody dat. Pokud chcete v Expressu vrátit JSON, použijte metodu json() , například takto:

res.json({ id: 1, name: "Catcher in the Rye" })

Předchozí metoda v kódu Expressu odpovídá tomuto kódu modulu HTTP:

res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify({ id: 1, name: "Catcher in the Rye" }))

Hlavička Content-Type v protokolu HTTP je nastavena a odpověď je také převedena z javascriptového objektu na řetězec před vrácením zpět do volajícího klienta.

Při porovnání obou příkladů kódu je vidět, že Express použije k uložení několika napsaných řádků u běžných typů souborů, jako je JSON a HTML, metody pomocných rutin.

Vytvoření aplikace pomocí Expressu

Pokud chcete začít vyvíjet aplikaci Node.js pomocí architektury Expressu, musíte ji nainstalovat jako závislost. Dále doporučujeme, abyste napřed inicializovali projekt Node.js, aby se stažené závislosti ukládaly do souboru package.json. Tato obecná doporučení platí pro všechny aplikace vyvíjené pro modul runtime Node.js. Výhody tohoto postupu se projeví při sdílení změn kódu do úložiště, jako je GitHub. Kdokoli, kdo načítá kód z GitHubu, může jednoduše použít vámi napsaný kód tak, že nejdříve nainstaluje jeho závislosti.

Pokud chcete vytvořit webovou aplikaci s architekturou Express, mezi typické kroky patří:

  1. Vytvořte webovou aplikaci: Vytvořte instanci webové aplikace. V tuto chvíli se webový server nedá spustit, ale máte něco, co můžete rozšířit.
  2. Definujte trasy a obslužné rutiny tras: Definujte trasy, které by aplikace měla naslouchat. Typická správa tras zahrnuje:
    • kořenová trasa: /
    • trasy funkcí: /products
    • catch-all route: '*'
  3. Konfigurace middlewaru: Middleware je část kódu, která se dá spustit před nebo po požadavku. Mezi příklady patří ověřování, ověřování dat a protokolování.
  4. Spusťte aplikaci: Definujte port a pak aplikaci řiďte, aby naslouchala ho. Aplikace je teď připravená na příjem požadavků.