Beachte Folgendes:
- Das Deployen einzelner Funktionen nacheinander ist nicht auf 50 begrenzt. Eine einzelne Anfrage, die alle Funktionen deines Projekts ersetzt, ist weiterhin auf 50 begrenzt.
- Backend-Funktionen haben eine maximale Ausführungszeit von 5 Minuten, die auf dieselbe Weise durchgesetzt wird – egal ob die Funktion direkt aufgerufen, durch eine Automation ausgelöst oder als Workflow-Schritt aufgerufen wird. Anfragen, die dieses Limit überschreiten, werden abgebrochen.
Funktionen erstellen
Erstelle Backend-Funktionen als TypeScript-Dateien im Funktionsverzeichnis deines Projekts. Standardmäßig ist das Funktionsverzeichnisbase44/functions/, aber du kannst den Pfad in deiner Projektkonfiguration anpassen.
Jede Funktion lebt in ihrem eigenen Unterverzeichnis mit einer entry.ts- oder entry.js-Datei:
functions
<function-name>
entry.ts
functions/sendWelcomeEmail/entry.ts eine Funktion namens sendWelcomeEmail. Du kannst Funktionen auch zur Organisation in Unterverzeichnissen verschachteln. functions/email/send/entry.ts erstellt eine Funktion namens email/send.
Eine Konfigurationsdatei hinzufügen
Für erweiterte Anforderungen wie eigene Funktionsnamen oder Automationen füge einefunction.jsonc-Datei hinzu:
functions
<function-name>
entry.ts
function.jsonc
entry.ts
Die Code-Datei enthält deine Funktionslogik. Funktionen müssen denDeno.serve()-Wrapper verwenden und Response-Objekte zurückgeben:
Mehrere Dateien pro Funktion
Eine Funktion ist nicht auf eine einzelneentry.ts beschränkt. Teile die Logik auf mehrere Dateien im Verzeichnis der Funktion auf und importiere sie mit relativen Pfaden. Jede .js-, .ts-, .json- und .jsonc-Datei im Funktionsverzeichnis wird mit der Funktion deployt.
functions
process-order
entry.ts
validate.ts
types.ts
Code zwischen Funktionen teilen
Um Code in mehreren Funktionen wiederzuverwenden, lege ihn in einshared-Verzeichnis in deinem base44/-Ordner.
Wenn du eine Funktion deployst, lädt die CLI das shared-Verzeichnis mit hoch. Der Server bündelt nur die gemeinsamen Dateien, die diese Funktion importiert. Jede Funktion wird mit ihrer eigenen Kopie des gemeinsamen Codes deployt, den sie nutzt. Das bedeutet:
- Jede Funktion kann mit einem relativen Pfad aus
sharedimportieren. - Verschiedene Funktionen können am Ende unterschiedliche Versionen derselben gemeinsamen Datei ausführen. Wenn du eine gemeinsame Datei änderst und nur eine Funktion deployst, wird nur die Kopie dieser Funktion aktualisiert. Die anderen behalten die alte Version, bis du sie erneut deployst. Um eine gemeinsame Änderung überall anzuwenden, führe
base44 functions deployohne Argumente aus. Damit deployst du alle Funktionen auf einmal neu.
base44
shared
response.ts
functions
greet
entry.ts
farewell
entry.ts
Lokal testen
Führe deine Funktionen mitbase44 dev lokal aus, um Änderungen ohne Deployment zu testen. Details unter Lokale Entwicklung.
Funktionen deployen
Deploye Funktionen mitfunctions deploy oder deploy, um alle Projektressourcen auf einmal zu pushen. Du kannst bestimmte Funktionen nach Namen mit functions deploy <names...> deployen oder --force verwenden, um Remote-Funktionen zu entfernen, die lokal nicht vorhanden sind.
Um deployed Funktionen in dein lokales Projekt herunterzuladen, verwende functions pull. Um zu sehen, was aktuell deployed ist, verwende functions list.
Funktionen aufrufen
Rufe Backend-Funktionen aus deinem Frontend über das SDK auf oder über HTTP für Webhooks und externe Integrationen.Über das SDK
Verwendebase44.functions.invoke(), um Funktionen aus deinem Frontend aufzurufen. Das SDK übernimmt die Authentifizierung automatisch und übergibt die Anmeldedaten des aktuellen Benutzers an deine Funktion.
Über HTTP
Jede deployed Funktion erhält einen HTTP-Endpunkt unter:- Webhooks: Empfang von Callbacks von externen Diensten wie Stripe oder GitHub.
- Externe Integrationen: Anderen Systemen die Interaktion mit deiner App ermöglichen.
- Testen: Funktionen direkt mit Tools wie cURL oder Postman aufrufen.
Beim Aufruf von Funktionen über direktes HTTP (wie cURL oder Webhooks) gibt es
keinen authentifizierten Benutzerkontext. Verwende in diesen Fällen
asServiceRole für alle Operationen.Limit für Funktionsketten
Eine Kette von Funktionen, die sich gegenseitig aufrufen, darf bis zu sieben Funktionen lang sein. Die Funktion, die die Kette startet, zählt mit. Jeder Aufruf der achten Funktion an Base44 schlägt mit einem 403-Fehler fehl:error code: 1000. Das gilt auch für Aufrufe an Entitäten und Integrationen. Auch ein erneuter Versuch innerhalb der Kette schlägt auf die gleiche Weise fehl. Eine Funktion wird Teil einer Kette, wenn eine andere Funktion sie mit base44.functions.invoke() oder per fetch() an ihre URL aufruft.
So vermeidest du das Limit:
- Verschiebe Code, den mehrere Funktionen brauchen, nach
base44/shared/und importiere ihn dort. Rufe dann nicht mehr eine Funktion aus einer anderen auf. - Teile einen langen Job in einzelne Schritte auf. Lass jeden Schritt seinen Fortschritt speichern und zurückkehren. Starte den nächsten Schritt dann aus deinem Frontend oder über eine geplante Automation, nicht aus dem vorherigen Schritt.
Das SDK in Funktionen verwenden
In deinen Backend-Funktionen kannst du über das Base44-SDK auf die Daten, die Authentifizierung und die Integrationen deiner App zugreifen. VerwendecreateClientFromRequest(), um einen Client aus dem eingehenden Request zu erstellen.
Der Authentifizierungskontext hängt davon ab, wie die Funktion aufgerufen wurde:
-
Beim Aufruf über das SDK aus deinem Frontend: Die Authentifizierung des Benutzers wird automatisch durchgereicht. Du kannst auf den aktuellen Benutzer mit
base44.auth.me()zugreifen und Operationen mit seinen Berechtigungen durchführen. Für Operationen auf Admin-Ebene verwendeasServiceRole. -
Beim Aufruf über direktes HTTP (cURL, Webhooks, externe Dienste): Es gibt keinen authentifizierten Benutzer, also verwende
asServiceRolefür alle Operationen.
Runtime-API
Base44 stellt ein eingebautes Modulbase44:runtime mit Plattform-Hilfsfunktionen für deine Funktionen bereit. Importiere es direkt, ohne Installation:
waitUntil(): Hält die Funktion am Leben, um Hintergrundarbeit abzuschließen, nachdem du eine Antwort zurückgegeben hast.secrets: Liest die Secrets deiner App zur Laufzeit mitsecrets.get().
Hintergrundarbeit nach dem Antworten ausführen
VerwendewaitUntil(), um deine Funktion für Hintergrundarbeit am Leben zu halten, nachdem du eine Antwort zurückgegeben hast. Übergib ein Promise, und die Funktion läuft weiter, bis dieses Promise abgeschlossen ist. So kannst du schnell antworten und Arbeiten wie Logging, Benachrichtigungen oder ausgehende Webhooks danach erledigen.
waitUntil() gibt dasselbe Promise zurück, das du übergibst. Du kannst es also später im selben Handler kombinieren oder awaiten.
Hintergrundarbeit erfolgt nach bestem Bemühen. Abschluss und Wiederholung sind
nicht garantiert. Verlasse dich daher nicht darauf für kritische Operationen,
die nicht verloren gehen dürfen.
Secrets lesen
Verwendesecrets.get(), um die Umgebungsvariablen deiner App zur Laufzeit zu lesen. Die Funktion gibt den Wert als String zurück oder undefined, wenn das Secret nicht gesetzt ist:
secrets.get() innerhalb deines Handlers auf, nicht auf oberster Ebene deines Moduls. Secrets werden pro Request aufgelöst. Ein Lesezugriff beim Laden des Moduls, bevor ein Request läuft, gibt daher undefined zurück.
Konfiguriere Secrets über die CLI mit secrets set.
Mit Drittanbieter-APIs verbinden
Backend-Funktionen sind eine von mehreren Möglichkeiten, sich mit Drittanbieter-APIs zu verbinden. Sie sind ideal, wenn du volle Kontrolle über Requests benötigst oder API-Schlüssel sicher als Umgebungsvariablen speichern möchtest. Verwendesecrets set, um Umgebungsvariablen über die CLI zu konfigurieren.
Logs ansehen
Während der lokalen Entwicklung wird die Funktionsausgabe direkt in deinem Terminal ausgegeben, ohne denlogs-Befehl zu benötigen.
Für deployed Funktionen sieh dir die Logs mit dem logs-Befehl an. Die Logs enthalten Konsolenausgaben, Fehler und Zeitinformationen. Du kannst nach Funktionsname oder Zeitraum filtern. Wenn du einen KI-Coding-Agenten verwendest, kann die Skill base44-troubleshooter diese Logs automatisch abrufen und analysieren.
TypeScript-Typen
Generiere TypeScript-Typen aus deinen Funktionskonfigurationen, um Typsicherheit und Autovervollständigung für Funktionsnamen in deinem SDK-Code zu erhalten. Erfahre mehr über dynamische Typen.Siehe auch
- Automationen: Funktionen planen oder bei Datenbankereignissen auslösen
functions-Modul: SDK-Referenz zum Aufrufen von FunktionencreateClientFromRequest: Einen Client in Backend-Funktionen erstellenfunctions deploy: Lokale Funktionen zu Base44 deployenfunctions pull: Deployed Funktionen in dein lokales Projekt herunterladenfunctions list: Alle deployed Funktionen auflistenfunctions delete: Deployed Funktionen löschenlogs: Funktionslogs ansehenexec: Funktionen isoliert aus eigenständigen Skripten testen
Diese Seite wurde mit KI übersetzt. Die genauesten und aktuellsten Informationen findest du in der englischen Version.