Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://docs.langdock.com/llms.txt

Use this file to discover all available pages before exploring further.

Überblick

Mit dem Code-Node verarbeitest du Workflow-Daten direkt mit eigenem JavaScript- oder Python-Code. Nutze ihn, wenn Standard-Nodes nicht ausreichen, zum Beispiel für Berechnungen, Formatierungen, Validierungen, Dateiverarbeitung oder individuelle Geschäftslogik. Code

Wann du den Code-Node verwenden solltest

Die Code-Node ist perfekt für:
  • Datentransformationen und Formatierung
  • Mathematische Berechnungen
  • Benutzerdefinierte Geschäftslogik
  • JSON-Parsing und Manipulation
  • Datenvalidierung und -bereinigung
  • Datums-/Zeitoperationen
  • Dateiverarbeitung mit Python
Die Code-Node ist nicht ideal für:
  • KI-Analyse (verwende Agent-Node)
  • Externe API-Aufrufe (verwende HTTP-Request-Node)
  • Einfache Bedingungen (verwende Condition-Node)
  • Lange oder interaktive Analysen (verwende Datenanalyse)

Konfiguration

Sprache: Wähle aus, ob du deinen Code in JavaScript oder Python schreiben möchtest. Code-Editor: Schreibe deine Transformationslogik in der ausgewählten Sprache im Code-Editor, der sich öffnet, wenn du den Code-Node auswählst Auf vorherige Nodes zugreifen: Outputs von vorherigen Nodes sind als Variablen im Code-Node verfügbar. Die verfügbaren Variablennamen werden oben im Code-Editor angezeigt. Wie du den Output des Code-Nodes später verwendest, findest du unter Auf Code-Output zugreifen.

Beispiele

Statistiken berechnen

// Zugriff auf Daten von vorherigen Nodes
const scores = agent.output.structured.scores || [];

// Statistiken berechnen
const average = scores.reduce((a, b) => a + b, 0) / scores.length;
const max = Math.max(...scores);
const min = Math.min(...scores);

// Ergebnis zurückgeben
return {
  average_score: average.toFixed(2),
  highest_score: max,
  lowest_score: min,
  grade: average >= 90 ? "A" : average >= 80 ? "B" : "C"
};

Daten validieren und bereinigen

// Zugriff auf Formulardaten
const email = trigger.output.email || "";
const amount = trigger.output.amount || 0;

// Validieren
if (!email.includes("@")) {
  throw new Error("Ungültiges E-Mail-Format");
}

if (amount <= 0) {
  throw new Error("Betrag muss größer als null sein");
}

// Bereinigen und zurückgeben
return {
  email: email.trim().toLowerCase(),
  amount: parseFloat(amount.toFixed(2)),
  validated: true
};

Arrays transformieren und filtern

// Zugriff auf Daten von vorherigem Node
const customers = trigger.output.customers || [];

// Aktive Kunden filtern
const activeCustomers = customers.filter(c => c.status === "active");

// Daten transformieren
const processed = activeCustomers.map(customer => ({
  id: customer.id,
  name: `${customer.firstName} ${customer.lastName}`.trim(),
  email: customer.email.toLowerCase(),
  tier: customer.totalSpent > 1000 ? "premium" : "standard"
}));

return {
  customers: processed,
  total: processed.length,
  premiumCount: processed.filter(c => c.tier === "premium").length
};

Datumsoperationen

// Zugriff auf Event-Daten
const events = trigger.output.events || [];
const now = new Date();

const processedEvents = events.map(event => {
  const eventDate = new Date(event.date);
  const daysUntil = Math.ceil((eventDate - now) / (1000 * 60 * 60 * 24));

  return {
    title: event.title,
    date: eventDate.toISOString(),
    formatted: eventDate.toLocaleDateString("de-DE", {
      weekday: "long",
      year: "numeric",
      month: "long",
      day: "numeric"
    }),
    daysUntil: daysUntil,
    isUpcoming: daysUntil >= 0,
    isThisWeek: daysUntil >= 0 && daysUntil <= 7
  };
});

return {
  events: processedEvents,
  upcomingCount: processedEvents.filter(e => e.isUpcoming).length,
  thisWeekCount: processedEvents.filter(e => e.isThisWeek).length
};

JSON-Verarbeitung

// Verschachteltes JSON von API-Response
const apiResponse = http_request.output || {};

// Verschachtelte Daten extrahieren und vereinfachen
const users = apiResponse.data?.users || [];

const flattened = users.map(user => ({
  id: user.id,
  name: `${user.first_name || ""} ${user.last_name || ""}`.trim(),
  email: user.contact?.email || "",
  city: user.address?.city || "Unbekannt",
  isActive: user.status === "active"
}));

return {
  users: flattened,
  total: flattened.length,
  activeCount: flattened.filter(u => u.isActive).length
};

Aggregieren und Zusammenfassen

// Verkaufsdaten von vorherigem Node
const sales = http_request.output.sales || [];

// Nach Kategorie gruppieren
const byCategory = {};
sales.forEach(sale => {
  const cat = sale.category || "Sonstiges";
  if (!byCategory[cat]) {
    byCategory[cat] = { total: 0, count: 0, items: [] };
  }
  byCategory[cat].total += sale.amount || 0;
  byCategory[cat].count += 1;
  byCategory[cat].items.push(sale);
});

// Zusammenfassung berechnen
const summary = Object.entries(byCategory).map(([category, data]) => ({
  category,
  totalRevenue: data.total.toFixed(2),
  orderCount: data.count,
  averageOrder: (data.total / data.count).toFixed(2)
}));

// Nach Umsatz sortieren
summary.sort((a, b) => parseFloat(b.totalRevenue) - parseFloat(a.totalRevenue));

return {
  summary: summary,
  topCategory: summary[0]?.category || "Keine",
  grandTotal: sales.reduce((sum, s) => sum + (s.amount || 0), 0).toFixed(2)
};

Datei mit Python erstellen

Dateien, die du mit Python im Arbeitsverzeichnis erstellst, werden dem Node-Output unter _files hinzugefügt.
Python
import csv

customers = trigger.get("output", {}).get("customers", [])
active_customers = [c for c in customers if c.get("status") == "active"]

with open("active_customers.csv", "w", newline="") as file:
    writer = csv.DictWriter(file, fieldnames=["id", "email"])
    writer.writeheader()

    for customer in active_customers:
        writer.writerow({
            "id": customer.get("id"),
            "email": customer.get("email", "").lower()
        })

print(f"CSV mit {len(active_customers)} Kunden erstellt")

return {
    "active_count": len(active_customers),
    "file_name": "active_customers.csv"
}

Auf Code-Output zugreifen

Verwende den Code-Node-Namen, um auf zurückgegebene Werte aus JavaScript oder Python in nachfolgenden Nodes zuzugreifen:
{{code_node_name.output.customer}}
{{code_node_name.output.total}}
{{code_node_name.output.formatted_date}}
{{code_node_name.output.processed_items[0].name}}
Dateien, die du mit Python im Arbeitsverzeichnis erstellst, sind unter _files verfügbar:
{{code_node_name.output._files[0]._metadata.name}}

Sprachfunktionen

Die Funktionen des Code-Nodes hängen von der ausgewählten Sprache ab.

JavaScript

JavaScript läuft in einer sicheren Sandbox-Umgebung mit integrierten Utility-Funktionen:
  • ld.request(): HTTP-Anfragen ausführen
  • ld.log(): Debugging-Informationen ausgeben
  • Datenkonvertierungen: CSV-, Parquet-, Arrow-Format-Konvertierungen
  • Standard-JavaScript: JSON-, Date-, Math-, Array-, Object-Methoden

Vollständige Utilities-Referenz

Sieh dir alle verfügbaren Sandbox-Utilities an, einschließlich Datenkonvertierungen, SQL-Validierung, Kryptographie und mehr.

Python

Python läuft in einer isolierten Umgebung ohne Internetzugang.
  • Verwende return auf oberster Ebene, um den Node-Output festzulegen
  • Verwende print(), um Logs zu schreiben
  • Verwende vorinstallierte Daten- und Dokumentbibliotheken wie pandas, numpy, openpyxl und pypdf
  • Greife auf vorherige Node-Outputs als Variablen zu, wenn ihre Slugs gültige Python-Bezeichner sind
  • Lies Workflow-Anhänge aus dem Arbeitsverzeichnis
  • Speichere Dateien im Arbeitsverzeichnis, um sie unter _files bereitzustellen
  • Läuft ohne Internetzugang
Die JavaScript-Utilities ld.* sind in Python nicht verfügbar.

Best Practices

Gib Daten als Objekte zurück für einfachen Zugriff in späteren Nodes. Das macht es einfach, spezifische Werte in nachfolgenden Nodes mit Punkt-Notation zu referenzieren.
Verwende ||, Optional Chaining oder Python .get(), um Standardwerte bereitzustellen und Fehler zu verhindern, wenn Daten undefined oder null sind.
Umschließe riskante Operationen mit try/catch in JavaScript oder try/except in Python. Das hilft dir, Workflow-Fehler zu verhindern und aussagekräftige Fehlermeldungen bereitzustellen.
Komplexe Logik könnte in einem Agent-Node besser aufgehoben sein. Verwende Code-Nodes für unkomplizierte Transformationen und Berechnungen, nicht für Aufgaben, die Intelligenz oder Kontextverständnis erfordern.
Dokumentiere, was dein Code macht, für zukünftige Referenz. Klare Kommentare helfen dir und deinem Team, die Logik zu verstehen, wenn der Workflow später erneut besucht wird.

Nächste Schritte

Agent

Verwende KI für intelligente Verarbeitung

HTTP Request

Hole externe Daten ab

Datenanalyse

Analysiere Daten mit einem Agent