Jak vytvořit typově bezpečný zkracovač URL v NodeJS s NestJS

Jak vytvořit typově bezpečný zkracovač URL v NodeJS s NestJS

Úvod

Zkracování URL adres je běžný úkol při vývoji webových aplikací. Umožňuje nám zkrátit dlouhé a neohrabané adresy na krátké a snadno sdílené odkazy. V jazyce NodeJS lze k tomuto účelu použít řadu různých knihoven a modulů. V tomto tutoriálu si ukážeme, jak vytvořit typově bezpečný zkracovač URL pomocí NestJS.

Co je NestJS?

NestJS je moderní webový framework pro NodeJS postavený na Express. Nabízí řadu funkcí, které usnadňují vývoj webových aplikací, včetně:

* Typové zabezpečení
* Injekce závislostí
* Validace dat
* Integrace databáze

Vytvoření nové aplikace NestJS

Nejprve je třeba vytvořit novou aplikaci NestJS. Použijte následující příkaz:


nest new url-shortener

Po vytvoření nové aplikace přejděte do jejího adresáře:


cd url-shortener

Instalace závislostí

Dále je třeba nainstalovat nezbytné závislosti. Použijeme knihovnu short-uuid pro generování krátkých a jedinečných ID URL adres a class-validator pro validace dat:

  Zde je návod, jak nainstalovat Firefox do Chromebooku


npm install short-uuid class-validator

Vytvoření služby zkracování URL

Vytvořme službu, která bude zodpovědná za zkracování URL adres. Vytvořte soubor url-shortener.service.ts v adresáři src/url-shortener. Přidejte následující kód:

typescript
import { Injectable } from '@nestjs/common';
import { ShortUuid } from 'short-uuid';
import { Validator } from 'class-validator';
import { CreateUrlDto } from './dto/create-url.dto';

@Injectable()
export class UrlShortenerService {
private readonly shortUuid = new ShortUuid();
private readonly validator = new Validator();

async shortenUrl(createUrlDto: CreateUrlDto): Promise<string> {
// Validace vstupních údajů
const errors = await this.validator.validate(createUrlDto);
if (errors.length > 0) {
throw new Error('Neplatné vstupní údaje.');
}

// Generování krátkého ID URL adresy
const shortId = this.shortUuid.uuid();

// Vrácení krátkého ID URL
return shortId;
}
}

V tomto kódu:

* ShortUuid generuje krátké a jedinečné ID URL adres.
* Validator provádí validaci dat.
* CreateUrlDto definuje datovou třídu pro vstupní údaje (viz níže).

Vytvoření datové třídy CreateUrlDto

Vytvořme datovou třídu pro vstupní údaje:

typescript
import { IsString, IsUrl } from 'class-validator';

export class CreateUrlDto {
@IsString()
@IsUrl()
url: string;
}

Tato datová třída používá dekorátory class-validator k ověření, zda má pole url platný řetězec adresy URL.

Vytvoření řadiče URL

Vytvořme řadič, který bude zpracovávat požadavky na zkrácení URL. Vytvořte soubor url-shortener.controller.ts v adresáři src/url-shortener. Přidejte následující kód:

typescript
import { Controller, Post, Body } from '@nestjs/common';
import { UrlShortenerService } from './url-shortener.service';
import { CreateUrlDto } from './dto/create-url.dto';

@Controller('url-shortener')
export class UrlShortenerController {
constructor(private readonly urlShortenerService: UrlShortenerService) {}

@Post()
async shortenUrl(@Body() createUrlDto: CreateUrlDto): Promise<string> {
return this.urlShortenerService.shortenUrl(createUrlDto);
}
}

V tomto kódu:

* @Controller je dekorátor, který označuje třídu jako řadič.
* @Post je dekorátor, který označuje metodu jako akci POST.
* @Body je dekorátor, který získává objekt těla požadavku a naplní jej do datové třídy CreateUrlDto.

Konfigurace aplikace

Nakonec je třeba nakonfigurovat aplikaci tak, aby používala náš řadič a službu. Otevřete soubor url-shortener.module.ts v adresáři src/url-shortener a přidejte následující kód:

typescript
import { Module } from '@nestjs/common';
import { UrlShortenerController } from './url-shortener.controller';
import { UrlShortenerService } from './url-shortener.service';

@Module({
controllers: [UrlShortenerController],
providers: [UrlShortenerService],
})
export class UrlShortenerModule {}

Tento kód zaregistruje řadič a službu u aplikace NestJS.

Spuštění aplikace

Pro spuštění aplikace spusťte následující příkaz:


npm start

Aplikace bude naslouchat na portu 3000.

Testování zkracovače URL

Nyní můžeme otestovat náš zkracovač URL pomocí nástroje Postman nebo prohlížeče. Zašlete požadavek POST na adresu http://localhost:3000/url-shortener se vstupními údaji JSON:

json
{
"url": "https://www.example.com"
}

Měli byste obdržet odpověď JSON s nově zkráceným ID URL.

Závěr

V tomto tutoriálu jsme si ukázali, jak vytvořit typově bezpečný zkracovač URL v NodeJS s NestJS. Aplikovali jsme zásady typového zabezpečení a validace dat, abychom zajistili robustnost a bezpečnost naší aplikace. Tento zkracovač URL lze snadno přizpůsobit a rozšířit pro různé scénáře použití.

Nejčastější dotazy (FAQ)

1. Co je typové zabezpečení?

Typové zabezpečení je technika programování, která zajišťuje, že proměnné mohou uchovávat pouze hodnoty specifického typu.

2. Jaké jsou výhody typového zabezpečení?

* Odhalení chyb dříve v procesu vývoje
* Zlepšení čitelnosti a udržovatelnosti kódu
* Ochrana před útoky typu runtime, jako je injekce SQL

3. Co je NestJS?

NestJS je moderní webový framework pro NodeJS postavený na Express. Nabízí řadu funkcí, které usnadňují vývoj webových aplikací, včetně typového zabezpečení a injekce závislostí.

4. Co je short-uuid?

Short-uuid je knihovna pro NodeJS, která generuje krátké a jedinečné ID.

5. Co je class-validator?

Class-validator je knihovna pro NodeJS, která provádí validace dat.

6. Jaké další funkce lze přidat do zkracovače URL?

* Ukládání a načítání původních adres URL do databáze
* Správa statistik kliknutí
* Použití vlastního algoritmu pro generování zkrácených ID URL

7. Jak lze zkracovač URL zabezpečit?

* Použití SSL certifikátu pro šifrování komunikace
* Omezení počtu zkrácených URL adres, které může uživatel vytvořit
* Kontrola platnosti zkrácených ID URL před přesměrováním

8. Jak lze zkracovač URL optimalizovat?

* Použití vyrovnávání zátěže pro zvládání velkého provozu
* Ukládání zkrácených ID URL do mezipaměti pro rychlejší načítání
* Použití CDN pro doručování zkrácených ID URL uživatelům po celém světě