Nel nostro percorso di approfondimento su Vercel è arrivato il momento di esplorare un aspetto fondamentale che ci permette di rendere le applicazioni dinamiche, reattive e altamente personalizzabili: le funzioni serverless, il middleware e i background jobs. Questi strumenti, messi a disposizione da Vercel, ci consentono di automatizzare processi, intervenire nel ciclo di vita delle richieste HTTP e gestire logiche asincrone, tutto con una facilità d’integrazione che rispecchia l’approccio “developer-first” di questa piattaforma.
Quando costruiamo un’applicazione moderna, ci scontriamo spesso con l’esigenza di eseguire codice lato server. Che si tratti di accedere ad un database, autenticare un utente, generare contenuti dinamici o integrare API di terze parti, abbiamo bisogno di un ambiente di esecuzione sicuro, scalabile e performante. In Vercel, questa esigenza viene soddisfatta con le Serverless Functions, che rappresentano una delle colonne portanti dell’infrastruttura.
Le Serverless Functions
Le Serverless Functions in Vercel sono piccole unità di codice che scriviamo utilizzando linguaggi come JavaScript, TypeScript o Go. Le collochiamo in una directory chiamata api/ e Vercel le trasforma automaticamente in endpoint accessibili via HTTP. La bellezza di questo approccio sta nel fatto che non dobbiamo preoccuparci della configurazione del server, né della scalabilità: Vercel gestisce tutto dietro le quinte, facendoci concentrare solo sulla logica di business.
Quando un utente invia una richiesta, ad esempio a /api/hello, Vercel esegue la funzione corrispondente e restituisce la risposta. Le funzioni sono stateless e vengono eseguite in ambienti isolati, il che significa che possiamo fare affidamento su una sicurezza intrinseca. Allo stesso tempo possiamo sfruttare variabili d’ambiente, pacchetti npm e persino connessioni a database per arricchire il comportamento delle funzioni.
Un esmepio pratico di quanto detto è il seguente app/api/hello/route.ts:
export function GET(request: Request) {
return new Response('Hello from Vercel!');
}
Abbiamo la possibilità di definire funzioni standard, che rispondono in tempo reale alle richieste, oppure funzioni Edge, progettate per esecuzioni estremamente rapide in prossimità dell’utente.
Quando si distribuisce l'applicazione, infatti, Vercel imposta automaticamente gli strumenti e le ottimizzazioni per il framework scelto. Assicura una bassa latenza instradando il traffico attraverso la rete Edge di Vercel e posizionando le funzioni in una regione specifica quando è necessario un maggiore controllo sulla localizzazione dei dati.
Le Edge Functions sono una delle innovazioni più interessanti di Vercel, poiché ci permettono appunto di ridurre drasticamente la latenza, rendendo le nostre app super reattive, indipendentemente dalla posizione geografica del visitatore.
Per fare un esempio di Edge Function supponiamo di voler reindirizzare automaticamente gli utenti in base alla loro lingua preferita, che possiamo rilevare dall’header Accept-Language della richiesta. Questo è un caso d’uso perfetto per una Edge Function: vogliamo prendere una decisione immediata prima che la pagina venga caricata, il più vicino possibile all’utente.
Quindi, quando un utente visita il sito (es. /), se la sua lingua preferita è fr, lo reindirizziamo a /fr. Se è it, lo mandiamo a /it. Altrimenti rimane sulla versione inglese /en.
Per usare una Edge Function, creiamo un file come middleware.ts (oppure middleware.js) nella root del progetto, se stiamo usando Next.js.
import { NextRequest, NextResponse } from 'next/server';
// Indichiamo che questa è una Edge Function
export const config = {
matcher: ['/'], // Esegui solo sulla root
};
export function middleware(request: NextRequest) {
const acceptLanguage = request.headers.get('accept-language');
// Funzione per determinare la lingua principale dell'utente
function getPreferredLocale(header: string | null) {
if (!header) return 'en';
if (header.includes('fr')) return 'fr';
if (header.includes('it')) return 'it';
return 'en';
}
const preferredLocale = getPreferredLocale(acceptLanguage);
const url = request.nextUrl.clone();
// Se già siamo nella lingua giusta, non reindirizzare
if (!url.pathname.startsWith(`/${preferredLocale}`)) {
url.pathname = `/${preferredLocale}`;
return NextResponse.redirect(url);
}
return NextResponse.next(); // Continua normalmente
}
Middleware Vercel e il flusso delle richieste
Con il middleware di Vercel, come abbiamo visto, possiamo intercettare ogni richiesta HTTP prima che raggiunga la destinazione finale. Questo ci offre un potere enorme: possiamo autenticare gli utenti, reindirizzare le richieste, riscrivere gli URL o bloccare accessi non autorizzati.
Il middleware su Vercel è costruito per essere eseguito sull’edge, ovvero vicino all’utente, proprio come le Edge Functions. Questo significa che le decisioni vengono prese prima che i dati viaggino lungo la rete, migliorando drasticamente la velocità di risposta. Il middleware è scritto in TypeScript o JavaScript e risiede all’interno della directory middleware.ts o middleware.js.
Potremmo ad esempio voler proteggere una sezione del sito riservata agli utenti autenticati. Con una semplice funzione middleware, possiamo controllare il token JWT presente nei cookie e, se non valido, reindirizzare l’utente alla pagina di login. Possiamo anche personalizzare l’esperienza dell’utente in base alla lingua del browser o all’ora locale, semplicemente modificando il percorso della richiesta.
La configurazione del middleware avviene nel file vercel.json oppure attraverso annotazioni nei file stessi. Possiamo decidere su quali percorsi debba essere attivo e su quali no. Questa granularità ci permette di bilanciare prestazioni e funzionalità in maniera estremamente efficace.
Background Jobs
Arriviamo ora a un altro componente essenziale: i background jobs, conosciuti su Vercel come "Cron Jobs". In molte applicazioni moderne abbiamo la necessità di eseguire operazioni in background ad intervalli regolari. Pensiamo, ad esempio, all’invio di newsletter, alla pulizia di record obsoleti nel database, al controllo periodico di feed RSS o all’aggiornamento di dati da fonti esterne. Tutte queste attività non devono bloccare l’interazione dell’utente e non devono essere eseguite in risposta diretta a una richiesta HTTP.
I Cron Jobs su Vercel ci permettono di definire task ricorrenti con una sintassi semplice e potente. Possiamo configurarli direttamente dalla dashboard, specificando l’endpoint da chiamare (di solito una Serverless Function) e la frequenza con cui eseguirli. Possiamo decidere se vogliamo che vengano eseguiti ogni ora, ogni giorno, o in un determinato momento della settimana. Questo ci consente di pianificare attività automatizzate con estrema precisione.
Una delle cose che ci colpisce di più è come Vercel abbia integrato i jobs nel suo ecosistema senza introdurre complessità. I log delle esecuzioni sono accessibili direttamente dalla dashboard, e possiamo monitorare eventuali errori o fallimenti in modo proattivo. In caso di bisogno, possiamo anche forzare l’esecuzione manuale di un job per testarne il comportamento.
Per gli sviluppatori abituati a lavorare con sistemi cron tradizionali o con strumenti esterni come GitHub Actions o cronjob Kubernetes, la soluzione proposta da Vercel rappresenta un’evoluzione significativa in termini di semplicità e integrazione.
Per poter accedere ai Cron Jobs bisogna :
- Selezionare il nostro progetto dalla dashboard di Vercel.
- Selezionare la scheda Impostazioni.
- Selezionare la scheda Cron Jobs dalla barra laterale sinistra.

Cron Jobs con Vercel
In questa pagina viene mostrato in maniera molto semplice e guidata come inserire un Cron Job nella nostra applicazione.
Conclusioni
In questa lezione abbiamo visto che utilizzare Functions, Middleware e Jobs su Vercel ci permette di progettare e mantenere applicazioni molto più intelligenti e autonome. Le funzioni serverless ci danno la potenza di un backend flessibile e moderno. Il middleware ci consente di avere un controllo granulare sulle richieste, garantendo sicurezza e personalizzazione. I background jobs ci offrono automazioni affidabili che vivono al di fuori del flusso sincrono dell’applicazione.
Se vuoi aggiornamenti su Vercel: funzioni e automazioni su Functions, Middleware e Jobs inserisci la tua email nel box qui sotto: