Skip to main content
Cette page fait partie d’une compétence d’agent de code IA et est écrite pour les agents, pas pour les humains. Pour la documentation Base44 lisible par un humain, consultez la documentation développeur.

Créer des fonctions

Les fonctions Base44 sont des fonctions backend serverless qui s’exécutent sur Deno. Elles sont définies localement dans votre projet et déployées vers le backend Base44.

Répertoire des fonctions

Toutes les définitions de fonctions doivent être placées dans le dossier base44/functions/ de votre projet. La fonction la plus simple est un dossier avec un fichier entry.ts ou entry.js à l’intérieur. Structure d’exemple :
my-app/
  base44/
    functions/
      process-order/
        entry.ts
      send-notification/
        entry.ts

Comment créer une fonction

  1. Créez un nouveau répertoire dans base44/functions/ avec le nom de votre fonction (utilisez kebab-case)
  2. Créez entry.ts (ou entry.js) dans ce répertoire
  3. Déployez la fonction avec le CLI

Découverte des fonctions

Le CLI découvre les fonctions à partir des fichiers entry.ts ou entry.js. Un dossier contenant l’un de ces fichiers est une fonction :
base44/
  functions/
    process-order/
      entry.ts
Le nom de la fonction est le chemin depuis la racine des fonctions jusqu’à ce dossier. Par exemple :
FichierNom de la fonction
base44/functions/process-order/entry.tsprocess-order
base44/functions/orders/process/entry.tsorders/process
Règles :
  • entry.ts ou entry.js doit se trouver dans un sous-dossier nommé, pas directement dans base44/functions/
  • tous les fichiers *.js, *.ts et *.json sous le dossier de la fonction sont inclus lors du déploiement
  • les chemins de fonctions comportant un point dans un segment sont ignorés

Fichier d’entrée

Les fonctions s’exécutent sur Deno et doivent exporter via Deno.serve(). Utilisez le préfixe npm: pour les paquets npm.
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  // Get authenticated client from request
  const base44 = createClientFromRequest(req);
  
  // Parse input
  const { orderId, action } = await req.json();
  
  // Your logic here
  const order = await base44.entities.Orders.get(orderId);
  
  // Return response
  return Response.json({
    success: true,
    order: order
  });
});

Objet Request

La fonction reçoit un objet Deno Request standard :
  • req.json() - Parser le corps JSON
  • req.text() - Obtenir le corps texte brut
  • req.headers - Accéder aux en-têtes de la requête
  • req.method - Méthode HTTP

Objet Response

Retournez avec Response.json() pour des réponses JSON :
// Success response
return Response.json({ data: result });

// Error response with status code
return Response.json({ error: "Something went wrong" }, { status: 400 });

// Not found
return Response.json({ error: "Order not found" }, { status: 404 });

Exemple complet

Structure du répertoire

base44/
  functions/
    process-order/
      entry.ts

entry.ts

import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  try {
    const base44 = createClientFromRequest(req);
    const { orderId } = await req.json();
    
    // Validate input
    if (!orderId) {
      return Response.json(
        { error: "Order ID is required" },
        { status: 400 }
      );
    }
    
    // Fetch and process the order
    const order = await base44.entities.Orders.get(orderId);
    if (!order) {
      return Response.json(
        { error: "Order not found" },
        { status: 404 }
      );
    }
    
    return Response.json({
      success: true,
      orderId: order.id,
      processedAt: new Date().toISOString()
    });
    
  } catch (error) {
    return Response.json(
      { error: error.message },
      { status: 500 }
    );
  }
});

Utiliser l’accès service role

Pour les opérations administrateur, utilisez asServiceRole :
import { createClientFromRequest } from "npm:@base44/sdk";

Deno.serve(async (req) => {
  const base44 = createClientFromRequest(req);
  
  // Check user is authenticated
  const user = await base44.auth.me();
  if (!user) {
    return Response.json({ error: "Unauthorized" }, { status: 401 });
  }
  
  // Use service role for admin operations
  const allOrders = await base44.asServiceRole.entities.Orders.list();
  
  return Response.json({ orders: allOrders });
});

Utiliser des secrets

Accédez aux variables d’environnement configurées dans le tableau de bord de l’application :
Deno.serve(async (req) => {
  // Access environment variables (configured in app settings)
  const apiKey = Deno.env.get("STRIPE_API_KEY");
  
  const response = await fetch("https://api.stripe.com/v1/charges", {
    headers: {
      "Authorization": `Bearer ${apiKey}`
    }
  });
  
  return Response.json(await response.json());
});

Conventions de nommage

  • Nom du répertoire : utilisez le kebab-case (par exemple, process-order, send-notification)
  • Nom de la fonction : provient du chemin du répertoire sous base44/functions/
    • Valides : process-order, orders/process, send_notification, myFunction
    • Invalides : process.order, send.notification.v2
  • Fichier d’entrée : utilisez entry.ts ou entry.js

Déployer les fonctions

Après la création de votre fonction, déployez-la vers Base44 :
npx base44 functions deploy
Pour plus de détails sur le déploiement, consultez functions-deploy.md.

Remarques

  • Les fonctions s’exécutent sur le runtime Deno, pas Node.js
  • Utilisez le préfixe npm: pour les paquets npm (par exemple, npm:@base44/sdk)
  • Utilisez createClientFromRequest(req) pour obtenir un client qui hérite du contexte d’authentification de l’appelant
  • Configurez les secrets via le tableau de bord de l’application pour les clés API
  • Gérez les erreurs proprement et retournez les codes de statut HTTP appropriés

Erreurs courantes

MauvaisCorrectPourquoi
base44/functions/myFunction.js (fichier unique)base44/functions/my-function/entry.tsLes fonctions doivent se trouver dans un sous-répertoire nommé
base44/functions/entry.tsbase44/functions/my-function/entry.tsLe nom de la fonction provient du chemin du sous-répertoire
import { ... } from "@base44/sdk"import { ... } from "npm:@base44/sdk"Deno exige le préfixe npm: pour les paquets npm
Répertoire MyFunction ou myFunctionRépertoire my-functionUtilisez le kebab-case pour les noms de répertoires
Cette page a été traduite à l’aide de l’IA. Pour les informations les plus précises et à jour, consultez la version anglaise.