Skip to content

NextJS: getStaticProps e numero limitato di richieste

Torna agli articoli

Qualche articolo fa ho parlato di Laravel e come modificare il suo limite di richieste.
Come ho detto proprio in quell’articolo, lavorando ad un progetto che mixa Laravel per il backend e NextJS per il Frontend mi sono nuovamente imbattuto nella problematica del RateLimit e dell’annoso errore 429: Too many request.

Visto che non è apprezzabile caricare il server di Backend con le richieste, ho pensato ad un alternativa lato frontend, quindi fruendo della funzione di staticizzazione delle Props di Next Js con un piccolo delay. Ho deciso quindi di impostare un delay (tramite Promise in Javascript) affinché, secondo un intervallo definito ci fosse la chiamata asincrona. In questo modo anche se durante un loop, il sistema avrebbe “temporeggiato” tra una chiamata ed un’altra.

Il progetto comunque è visionabile sul mio Github, in ogni caso, si tratta soltanto di creare due funzioni, una delegata alla gestione dell’altra, che non è altro che una Promise:

export async function avoidRateLimit() {
        await sleep()
}

function sleep(ms = 500) {
    return new Promise((res) => setTimeout(res, ms))
}
Sono davvero due funzioni semplicissime che permettono, inserendo prima della vostra fetch, la chiamata alla avoidRateLimit() un modo per creare un delay tra una chiamata e l’altra. Nello specifico la chiamata sarà qualcosa di questo tipo:
export async function getData() {
    await avoidRateLimit(500)
    const res = await fetch('...')
    const data = await res.json()
    return data
}
Utilizzato la getData() come sorgente della props (nella funzione getStaticProps), a quel punto si avvierà il loop ma con un delay di 500 ms.

Preventivo Gratuito