NestJS - backend framework pro webové aplikace

NestJS – backend framework pro webové aplikace

Nedávno jsme zveřejnili staronovou referenci o Informačním systému pro CENTRUM-VZDĚLÁVÁNÍ.CZ a právě v tomto informačním systému, resp. webové aplikaci, jsme jako backend část využili NodeJS framework – konkrétně NestJS.

NestJS

Nest JS - node js framework
Nest JS – progesivní Node.js framework

Pojdme si nejdříve říci, co to vlastně je NestJS. Jedná se o progresivní framework Node.js pro vytváření efektivních, spolehlivých a škálovatelných aplikací na straně serveru. Jinými slovy se jedná o framework pro vytváření backendových aplikací. Mezi základní charakteristiky NestJS patří, že se používá TypeScript a struktura kódu je velmi podobná Angularu. Z těchto indícii jasně vychází, že NestJS je ideální backend framework pro vývojáře, kteří již mají zkušenosti s Angularem, protože mohou využít svoje znalosti z frontend vývoje v TypeScriptu.

Dalším důležitým aspektem je výborná dokumentace a živá komunita. Pokud bychom chtěli například porovnávat s PHP frameworkem Apigility, který jsme používali předtím, tak se to ani nedá porovnat – opravdu „0 a 100“. NestJS je skvěle dokumentovaný na adrese https://docs.nestjs.com/, kde kromě „teorie“ jsou i doporučené postupy. A komunita – ta je aktivní na platformě Discord. Zajímavosti je, že NestJS framework pochází od našich „sousedů“ z Polska a stojí za ním společnost Trilon.

Ukázka kódu z webu https://nestjs.com/

Další charakteristiky

  • Součástí NestJS je také zabudované CLI, které může programátorům velmi ušetřit práci při tvorbě kódu, kdy například velmi užitečný příkaz „nest g recourses NAME“ vytvoří celý boilerplate kód pro CRUD endpoint.
  • Výchozí HTTP server je Express, ale je možnost přepnout na Fastify.
  • Z hlediska databází pracuje jak s SQL, tak s noSQL servery. Takže můžete použít například jak MySQL, tak i MongoDB.
  • Dá se používat s různými knihovnami jako je například TypeORM, Prisma nebo Swagger.
  • Není problém používat NestJS jako REST API nebo GraphQL API.

Struktura kódu NestJS

Framework NestJS pro „neviditelnou“ čast webové aplikace, tzn. backend, je tvořen hlavně „controllers„, což jsou jednotlivé end-pointy, které se označují pomocí anotace, tzn. např. @get(„home“), případně @post(„car/:id“), což značí parametrizovaný endpoint. Takže kód je navíc velmi přehledný díky tomu, že v controllers se většinou pouze volají konkrétní services, kde je až samotná logika aplikace.

Autentifikace se řeší pomocí strategie, kde můžeme využít šablony standardizovaných procesů, jako je například JWT (Json Web Token). Pro následnou autorizaci a zajištění kontroly přístupu k jednotlivým endpointům slouží guards, resp. anotace @Roles().

Základní kurz přímo od tvůrců NestJS

Co můžeme určitě doporučit, je přímo on-line kurz formou předem nahraných videií přímo od tvůrců NestJS. Video kurz najdete na adrese https://courses.nestjs.com/, kde aktuálně za $89 dostanete cca 5 hodinový obsah.

NestJS webové aplikace - ukázka z video kurzu
Veřejná ukázka z video kurzu z webu https://courses.nestjs.com/

Spuštění NestJS aplikace na vlastním serveru

Na závěr vám ještě můžeme shrnout, jak zprovoznit aplikace na svém vlastním serveru, protože dle průzkumu na internetu to není již tak běžné. Častější řešení je puštění v Google Cloud Platform, Amazon Web Services nebo jiné cloudové platformě pro spouštění „konternejů“. Pro spuštění Node.js aplikace, takže i NestJS aplikace na linux serveru je potřeba aplikace PM2.

  • instalace PM2 na linuxu, za předpokladu že Node a NPM již na serveru jsou – npm install pm2 -g
  • přeložení aplikace pro produkční spuštění – npm run build
  • spuštění aplikace pomocí PM2 – pm2 start main.js --name MY_NAME

A pak ještě můžeme ukázat jednoduchou šablonu pro nastavení Apache2 virtualhostu s tím, že PORT_NUMBER je číslo portu, pod kterým NestJS aplikaci spouštíte.

<VirtualHost *:80>
  ServerName domain.com

  ProxyPreserveHost On
  ProxyPass / http://localhost:PORT_NUMBER/
  ProxyPassReverse / http://localhost:PORT_NUMBER/
</VirtualHost>
Webové aplikace, Zajímavosti
Angular, Apache2, Express, GraphQL, MongoDB, MySQL, NestJS, Node.js, PM2, REST API, TypeScript
IT a marketingové konference 2021
Vývoj ve WordPressu pomocí Docker (+ PHPStorm)