Skip to main content
Questa pagina fa parte di una skill per agenti IA di programmazione ed è scritta per gli agenti, non per gli umani. Per la documentazione Base44 leggibile dagli umani, consulta la documentazione per sviluppatori.

Creare funzioni

Le funzioni Base44 sono funzioni backend serverless che vengono eseguite su Deno. Sono definite localmente nel tuo progetto e distribuite al backend di Base44.

Directory delle funzioni

Tutte le definizioni delle funzioni devono essere posizionate nella cartella base44/functions/ nel tuo progetto. La funzione più semplice è una cartella con un file entry.ts o entry.js al suo interno. Struttura di esempio:
my-app/
  base44/
    functions/
      process-order/
        entry.ts
      send-notification/
        entry.ts

Come creare una funzione

  1. Crea una nuova directory in base44/functions/ con il nome della funzione (usa kebab-case)
  2. Crea entry.ts (o entry.js) in quella directory
  3. Distribuisci la funzione usando la CLI

Rilevamento delle funzioni

La CLI rileva le funzioni dai file entry.ts o entry.js. Una cartella che contiene uno di questi file è una funzione:
base44/
  functions/
    process-order/
      entry.ts
Il nome della funzione è il percorso dalla radice delle funzioni a quella cartella. Ad esempio:
FileNome della funzione
base44/functions/process-order/entry.tsprocess-order
base44/functions/orders/process/entry.tsorders/process
Regole:
  • entry.ts o entry.js deve essere all’interno di una sottocartella con nome, non direttamente in base44/functions/
  • tutti i file *.js, *.ts e *.json nella cartella della funzione sono inclusi durante la distribuzione
  • i percorsi delle funzioni con un punto in qualsiasi segmento del percorso vengono ignorati

File di entry point

Le funzioni vengono eseguite su Deno e devono esportare usando Deno.serve(). Usa il prefisso npm: per i pacchetti 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
  });
});

Oggetto Request

La funzione riceve un oggetto Request Deno standard:
  • req.json() - Analizza il body JSON
  • req.text() - Ottiene il body come testo grezzo
  • req.headers - Accede agli header della richiesta
  • req.method - Metodo HTTP

Oggetto Response

Restituisci usando Response.json() per le risposte 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 });

Esempio completo

Struttura della directory

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 }
    );
  }
});

Uso dell’accesso Service Role

Per operazioni a livello admin, usa 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 });
});

Uso dei secret

Accedi alle variabili d’ambiente configurate nella dashboard dell’app:
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());
});

Convenzioni di denominazione

  • Nome della directory: usa kebab-case (ad es. process-order, send-notification)
  • Nome della funzione: proviene dal percorso della directory sotto base44/functions/
    • Validi: process-order, orders/process, send_notification, myFunction
    • Non validi: process.order, send.notification.v2
  • File di entry: usa entry.ts o entry.js

Distribuire le funzioni

Dopo aver creato la tua funzione, distribuiscila a Base44:
npx base44 functions deploy
Per ulteriori dettagli sulla distribuzione, consulta functions-deploy.md.

Note

  • Le funzioni vengono eseguite sul runtime Deno, non Node.js
  • Usa il prefisso npm: per i pacchetti npm (ad es. npm:@base44/sdk)
  • Usa createClientFromRequest(req) per ottenere un client che eredita il contesto di autenticazione del chiamante
  • Configura i secret tramite la dashboard dell’app per le chiavi API
  • Assicurati di gestire gli errori con eleganza e restituire codici di stato HTTP appropriati

Errori comuni

SbagliatoCorrettoPerché
base44/functions/myFunction.js (singolo file)base44/functions/my-function/entry.tsLe funzioni devono trovarsi in una sottodirectory con nome
base44/functions/entry.tsbase44/functions/my-function/entry.tsIl nome della funzione proviene dal percorso della sottodirectory
import { ... } from "@base44/sdk"import { ... } from "npm:@base44/sdk"Deno richiede il prefisso npm: per i pacchetti npm
Directory MyFunction o myFunctionDirectory my-functionUsa kebab-case per i nomi delle directory
Questa pagina è stata tradotta utilizzando l’IA. Per informazioni più accurate e aggiornate, consulta la versione inglese.