An Interest In:
Web News this Week
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
- April 18, 2024
- April 17, 2024
0 - Nest JS from scratch
Installation des dpendances
Pour l'occasion, crons un dossier vide:
mkdir 0-nest-from-scratchcd 0-nest-from-scratch
Dans un premier temps, il faut initialiser npm.
npm init
Installation des dpendances de dveloppement:
npm i -D @[email protected] @types/node
Installation des dpendances:
npm i @nestjs/core @nestjs/common @nestjs/platform-express reflect-metadata
Configuration de Typescript
La premire chose faire dans un projet typescript est de configurer typescript via le fichier tsconfig.json
{ "include": ["src/**/*"], "compilerOptions": { "module": "CommonJS", "target": "ES2017", "outDir": "dist", "experimentalDecorators": true }}
Cration d'un module
Une application NestJS, a commence par un module.
Donc on va crer le fichier src/app.module.ts
.
Un module c'est une classe exporte sur laquelle on applique le dcorateur @Module
qui nous vient de @nestjs/common
.
import { Module } from '@nestjs/common';@Module({})export class AppModule {}
Cration d'un controlleur
C'est bien beau d'avoir un module mais faut-il encore en faire quelque chose.
Et pour cela nous allons crer un controlleur.
Un controlleur c'est une classe exporte sur laquelle on applique le dcorateur @Controller
import de @nestjs/common
.
import { Controller } from '@nestjs/common';@Controller()export class AppController {}
Pour le moment, notre controlleur n'est pas trs utile...
Nous allons donc lui ajouter une mthode sayHello
qui retournera la string Hello Nest
.
import { Controller } from '@nestjs/common';@Controller()export class AppController { sayHello(): string { return 'Hello Nest'; }}
Une mthode, c'est bien. Une route, c'est mieux!
Pour transformer la mthode sayHello
en routeur http, il suffit de lui appliquer le dcorateur @Get()
import { Controller, Get } from '@nestjs/common';@Controller()export class AppController { @Get() sayHello(): string { return 'Hello Nest'; }}
Pour en finir avec notre super controlleur, ajoutons-le tout simplement dans le module que nous avons cr prcdemment.
Ajoutons la classe AppController
dans la section controllers
des options de notre module.
import { Module } from '@nestjs/common';import { AppController } from './app.controller';@Module({ controllers: [AppController]})export class AppModule {}
Un fichier de dmarrage: main.ts
Top!
Maintenant que nous avons un module et un controlleur, il va nous falloir dmarrer notre application.
Pour raliser ce miracle, nous allons crer un fichier main.ts
qui va se charger de compiler le module et lancer le serveur.
On commence par crer une fonction asynchrone que l'on appellera bootstrap.
Et ensuite on l'execute.
async function bootstrap() {}bootstrap();
l'intrieur de la fonction bootstrap, crons une variable app qui va recevoir le rsultat awaiter de NestFactory.create() avec notre AppModule en paramtre.
import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';async function bootstrap() { const app = await NestFactory.create(AppModule);}bootstrap();
Finalement, on await la fonction app.listen() sur le port 3000.
import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000)}bootstrap()
Il ne reste plus qu' retourner dans le terminal pour transpiler et tester notre superbe API.
Compiler, lancer et tester
De retour dans le terminal, on peut utiliser la commande tsc
installe par typescript pour transpiler dans le dossier dist.
node_modules/.bin/tsc
Une fois la transpilation termine, on peut lancer notre API via commande:
node dist/main.js
Et pour tester, un petit curl des familles sera du meilleur des gots.
curl http://localhost:3000
Je serai heureux de rpondre toutes vos questions en commentaires
Original Link: https://dev.to/webeleon/0-nest-js-from-scratch-20b1
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To