Notiz
Ab dem 22. Februar 2023 bietet Vercel offiziell integrierte Cron-Jobs an, um Ihre serverlosen und Kantenfunktionen auszulösen. Lesen Sie die Dokumentation, um mehr zu erfahren. Beachten Sie, dass die Funktion während der Beta -Phase nur kostenlos ist. Es ist eine bezahlte Funktion für die allgemeine Verfügbarkeit, was bedeutet, dass die Route der GitHub -Aktionen für eine vollständig kostenlose Option relevant bleibt.
Cron Jobs mit Github -Aktionen für Next.js -Anwendungen auf Vercel ▲
Da die Vercel-Plattform ereignisgesteuert ist und daher keinen laufenden Server beibehält, können Sie Ihre API-Routen oder serverlosen Funktionen in Ihrer nächsten.js-Anwendung nicht wirklich planen. Obwohl es viele bereits bestehende Dienste gibt, die geplante Cron-Jobs anbieten, entschied ich letztendlich, dass Github-Aktionen zu meinen Bedürfnissen zu den besten geeignet sind, da es sich gut in jedes Projekt integriert, das bereits auf Github lebt, und es ist völlig kostenlos.
Alle GitHub -Aktionen befinden sich im Verzeichnis .github/workflows/ Ihres Repositorys und sind in YAML geschrieben.
.github/workflows/starter.yaml ist der grundlegendste Workflow, der Ihnen hilft, mit Aktionen zu beginnen.
Mit geplanten Ereignissen können Sie Aufgaben in bestimmten Intervallen ausführen. Zum Beispiel der bereitgestellte Workflow .github/workflows/scheduled.yaml führt alle 60 Minuten eine HTTP -Anforderung mit Curl aus.
name : Hourly cron job
on :
schedule :
- cron : ' */60 * * * * '
jobs :
cron :
runs-on : ubuntu-latest
steps :
- name : Hourly cron job
run : |
curl --request POST
--url 'https://example.com/api/task'
--header 'Authorization: Bearer ${{ secrets.ACTION_KEY }}'Wenn Sie Probleme beim Schreiben von Cron -Zeitplanausdrücken haben, schauen Sie sich Crontab Guru an.
API -Routen und serverlose Funktionen bieten eine einfache Lösung für den Aufbau Ihrer API mit Next.js auf Vercel. Jede Datei in den pages/api wird /api/* zugeordnet und wird als API -Endpunkt anstelle einer page behandelt.
Wenn Sie unabhängig von der Laufzeit serverlose Funktionen verwenden, müssen Sie die Dateien in das Root Ihres Projekts in das Verzeichnis /api/ das Verzeichnis einfügen.
Um API -Routen und serverlose Funktionen mit GitHub -Aktionen sicher auszulösen, müssen Sie im Header Ihres API -Anrufs einen Autorisierungsschlüssel bereitstellen, der bei Ausführung mit einem entsprechenden Schlüssel in Ihrer nächsten.js -Anwendung verglichen wird.
Sie können dies erreichen, indem Sie Ihrem Github -Repository verschlüsselte Geheimnisse hinzufügen und sie mit dem Kopfzeilen Ihrer HTTP -Anforderung übergeben, wie im vorherigen Code -Snippet gezeigt. Neben dem Hinzufügen des Schlüssels zu Ihrem Github -Repository müssen Sie auch in Ihrer nächsten. Js -Anwendung darauf zugreifen, vorzugsweise über Umgebungsvariablen.
Die pages/api/example.js implementiert diesen Autorisierungsfluss.
export default function handler ( req , res ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
} Verwenden Sie pages/api/example.ts für Typscript.
import type { NextApiRequest , NextApiResponse } from 'next'
export default function handler ( req : NextApiRequest , res : NextApiResponse ) {
const { APP_KEY } = process . env ;
const { ACTION_KEY } = req . headers . authorization . split ( " " ) [ 1 ] ;
try {
if ( ACTION_KEY === APP_KEY ) {
// Process the POST request
res . status ( 200 ) . json ( { success : 'true' } )
} else {
res . status ( 401 )
}
} catch ( err ) {
res . status ( 500 )
}
}