Suddividere un router Express monolitico in route di dominio
Devin suddivide un router Express di 2.000 righe in file di route specifici per dominio con middleware condiviso — quindi aggiorna tutti gli import e verifica che tutti i test vengano superati.Mostra il monolite a Devin
Conosci il file — un unico router Express cresciuto per diciotto mesi. Ogni endpoint per ogni dominio vive in Dì a Devin esattamente come vuoi che sia la struttura finale.
src/routes/index.ts: la registrazione utente accanto ai webhook di pagamento accanto alla ricerca dei prodotti. I controlli di autenticazione inline sono copiati e incollati in 40 handler diversi. Nessuno vuole toccarlo perché una modifica alla logica degli ordini potrebbe compromettere gli endpoint utente trecento righe più sopra.Ecco come di solito si presenta l’inizio del file:src/routes/index.ts (before — 2,000 lines)
Guida Devin con le convenzioni
Devin legge la tua codebase per individuare i pattern, ma è nel refactoring che le voci in Knowledge sono più utili. Aggiungi voci per le convenzioni che Devin dovrebbe seguire:
- Router patterns — “Ogni domain router utilizza
Router()ed è montato conapp.use('/domain', domainRouter)nella root” - Middleware — “Il middleware di autenticazione si trova in
src/middleware/ed è sempre importato, mai definito inline” - Error handling — “Tutti i route handler usano il nostro wrapper
asyncHandlerdasrc/lib/asyncHandler.ts— mai un try/catch diretto”
src/routes/admin.ts, che è già ben separato” al tuo prompt.Puoi anche usare Advanced Devin per generare voci di Knowledge per te — ti basta descrivere le tue convenzioni e creerà voci ben strutturate che puoi rivedere e salvare.Rivedi la PR di Devin
Devin mappa ogni endpoint, traccia il grafo degli import, estrae la logica condivisa, crea i file di dominio, riconfigura il router root ed esegue la tua suite di test. Ecco come si presenta in genere una PR:Ecco come si presenta il router root pulito dopo la suddivisione:E un file di route per il dominio, con il middleware condiviso correttamente importato:Ogni percorso URL rimane invariato —
src/routes/index.ts (after — 15 lines)
src/routes/orders.ts (after — excerpt)
/orders è ora gestito da ordersRouter montato su /orders, quindi i client e i test esistenti continuano a funzionare senza modifiche.(Facoltativo) Esegui il checkout del branch e testa in locale
Per un refactoring strutturale di questo tipo, vale la pena fare pull del branch e verificare in locale prima di effettuare il merge. Aprilo in Windsurf o nel tuo IDE preferito, avvia l’app e prova alcuni endpoint per confermare che routing, middleware e gestione degli errori si comportino esattamente come prima.Se qualcosa non ti convince, lascia un commento sulla PR — Devin lo prenderà in carico e apporterà una correzione.
