Skip to content

Hono

Ar trebui să îți construiești aplicația prin exportarea unei instanțe Hono din src/app.ts și înregistrarea rutelor pe aceasta. Seed-ul expune o singură rută GET / care returnează "Hello, World!" — extinde-o adăugând mai multe rute, middleware și grupuri de rute.

Fișierul de intrare

Fișierele soluției sunt organizate sub src/:

  • src/main.ts — scriptul de bootstrap care importă app și pornește serverul Node pe portul 3000 folosind @hono/node-server (preîncărcat, ascuns, read-only).
  • src/app.ts — fișierul în care creezi instanța Hono și înregistrezi rutele (fișier de soluție editabil).

Separarea definiției app de bootstrap-ul serverului îți permite să reutilizezi aceeași app în teste via app.request() fără a o atașa la un port real.

Configurarea serverului pentru API Tester

Serverul este pornit de src/main.ts (serve({ fetch: app.fetch, port: 3000, hostname: '0.0.0.0' })), deci rulează atunci când folosești tab-ul API Tester. API Tester trimite cereri HTTP reale către aplicația ta Hono și randează răspunsul.

typescript
import { serve } from '@hono/node-server';
import { app } from './app';

serve({ fetch: app.fetch, port: 3000, hostname: '0.0.0.0' });

Versiune

Rulează pe Node.js v22.0.0 cu Hono 4.

Limbi suportate

TypeScript

Framework de testare

Vitest

Recomandări speciale și detalii de implementare

  • Hono este construit pe standardele web Fetch API: handler-ele primesc un Context și trebuie să returneze un Response (sau un Promise<Response>). Un handler care apelează c.json(...) fără a-l returna va trimite un răspuns gol.
  • Folosește helper-ul de Context potrivit pentru tipul corpului (body): c.text(...) pentru text simplu, c.json(...) pentru JSON (setează automat Content-Type), c.html(...) pentru HTML.
  • Testele folosesc helper-ul integrat app.request() al Hono, care trimite o cerere prin aplicație fără a porni un server — perfect pentru teste unitare rapide și izolate.

Exemplu cu Vitest + app.request():

typescript
import { describe, it, expect } from 'vitest';
import { app } from './src/app';

describe('GET /', () => {
  it("returns 'Hello, World!' with status 200", async () => {
    const response = await app.request('/');
    expect(response.status).toBe(200);
    expect(await response.text()).toBe('Hello, World!');
  });
});

Biblioteci incluse

Cum se face depanarea

Hono este un framework de backend construit pe standardele web Fetch API — handler-ele tale primesc un Context și returnează un Response. Există trei modalități principale de a inspecta comportamentul la rulare:

1. Loguri din interiorul handler-elor de rute

Folosește direct console.log. Output-ul apare în terminalul serverului de dezvoltare:

typescript
app.get('/items', (c) => {
  console.log('GET /items called');
  return c.json([]);
});

2. API Tester

Folosește tab-ul API Tester din panoul din dreapta pentru a trimite cereri HTTP reale (GET / POST / PUT / PATCH / DELETE) către serverul tău Hono aflat în rulare. Alege o metodă, scrie o cale, adaugă headere/parametri/corp (body) și apasă pe Trimite (Send).

3. Pași pentru depanare folosind console.log

  1. Identifică zona cu probleme: Decide dacă problema se află într-un handler de rută, într-un middleware sau în conectarea app.

  2. Introdu instrucțiuni console.log(): Adaugă apeluri de logare înainte și după codul suspect. Toate logurile Hono merg în terminalul serverului.

  3. Verifică rezultatele testelor tale (Results Output)

  4. Folosește pictograma de depanare (Debug) din zona de previzualizare (Preview): Dă clic pe pictograma de depanare din zona Preview pentru a verifica output-ul terminalului.

  5. Analizează rezultatele: Compară logurile cu răspunsurile din API Tester pentru a depista rutele lipsă, codurile de stare greșite sau erorile netratate.

Greșeli frecvente

  • Omiterea utilizării return la apelul c.json(...) / c.text(...) — handler-ele trebuie să returneze un Response (sau o promisiune a acestuia). Un handler care apelează c.json(...) fără a-l returna trimite un răspuns gol.
  • Utilizarea c.body() pentru JSON — acesta este helper-ul pentru corpul brut (raw body). Folosește c.json() pentru obiecte, astfel încât header-ul Content-Type să fie setat corect.
  • Importarea din hono/node — pentru Node.js, instalează @hono/node-server și folosește import { serve } from '@hono/node-server'. Seed-ul face deja acest lucru.