Skip to main content
דף זה הוא חלק ממיומנות של סוכן קידוד AI ונכתב לסוכנים, לא לבני אדם. לתיעוד Base44 הקריא לבני אדם, ראה את תיעוד המפתחים.

Creating Functions

פונקציות Base44 הן פונקציות backend serverless שרצות על Deno. הן מוגדרות מקומית בפרויקט שלך ונפרסות ל-Base44 backend.

תיקיית Functions

כל הגדרות הפונקציות חייבות להיות ממוקמות בתיקיית base44/functions/ בפרויקט שלך. הפונקציה הפשוטה ביותר היא תיקייה עם קובץ entry.ts או entry.js בתוכה. מבנה לדוגמה:
my-app/
  base44/
    functions/
      process-order/
        entry.ts
      send-notification/
        entry.ts

איך ליצור פונקציה

  1. צור תיקייה חדשה ב-base44/functions/ עם שם הפונקציה שלך (השתמש ב-kebab-case)
  2. צור entry.ts (או entry.js) באותה תיקייה
  3. פרוס את הפונקציה באמצעות ה-CLI

גילוי פונקציות

ה-CLI מגלה פונקציות מקבצי entry.ts או entry.js. תיקייה שמכילה אחד מהקבצים האלה היא פונקציה:
base44/
  functions/
    process-order/
      entry.ts
שם הפונקציה הוא הנתיב משורש ה-functions לאותה תיקייה. לדוגמה:
קובץשם פונקציה
base44/functions/process-order/entry.tsprocess-order
base44/functions/orders/process/entry.tsorders/process
כללים:
  • entry.ts או entry.js חייבים להיות בתוך תת-תיקייה בעלת שם, לא ישירות ב-base44/functions/
  • כל קבצי *.js, *.ts, ו-*.json תחת תיקיית הפונקציה נכללים בעת פריסה
  • נתיבי פונקציה עם נקודה בכל קטע נתיב מתעלמים

קובץ Entry Point

הפונקציות רצות על Deno וחייבות לייצא באמצעות Deno.serve(). השתמש בקידומת npm: עבור חבילות 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
  });
});

אובייקט Request

הפונקציה מקבלת אובייקט Deno Request סטנדרטי:
  • req.json() - נתח גוף JSON
  • req.text() - קבל גוף טקסט גולמי
  • req.headers - גש לכותרות בקשה
  • req.method - שיטת HTTP

אובייקט Response

החזר באמצעות Response.json() לתגובות 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 });

דוגמה מלאה

מבנה תיקייה

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

שימוש בגישת Service Role

לפעולות ברמת אדמין, השתמש ב-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 });
});

שימוש בסודות

גש למשתני סביבה שהוגדרו בלוח האפליקציה:
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());
});

מוסכמות מתן שמות

  • שם תיקייה: השתמש ב-kebab-case (למשל, process-order, send-notification)
  • שם פונקציה: מגיע מנתיב התיקייה תחת base44/functions/
    • תקף: process-order, orders/process, send_notification, myFunction
    • לא תקף: process.order, send.notification.v2
  • קובץ entry: השתמש ב-entry.ts או entry.js

פריסת פונקציות

לאחר יצירת הפונקציה שלך, פרוס אותה ל-Base44:
npx base44 functions deploy
לפרטים נוספים על פריסה, ראה functions-deploy.md.

הערות

  • פונקציות רצות על Deno runtime, לא Node.js
  • השתמש בקידומת npm: עבור חבילות npm (למשל, npm:@base44/sdk)
  • השתמש ב-createClientFromRequest(req) כדי לקבל client שיורש את הקשר האימות של הקורא
  • הגדר סודות דרך לוח האפליקציה עבור מפתחות API
  • ודא לטפל בשגיאות בחסד ולהחזיר קודי סטטוס HTTP מתאימים

טעויות נפוצות

שגוינכוןלמה
base44/functions/myFunction.js (קובץ יחיד)base44/functions/my-function/entry.tsפונקציות חייבות לחיות בתת-תיקייה בעלת שם
base44/functions/entry.tsbase44/functions/my-function/entry.tsשם הפונקציה מגיע מנתיב תת-התיקייה
import { ... } from "@base44/sdk"import { ... } from "npm:@base44/sdk"Deno דורש קידומת npm: עבור חבילות npm
תיקיית MyFunction או myFunctionתיקיית my-functionהשתמש ב-kebab-case לשמות תיקיות
דף זה תורגם באמצעות בינה מלאכותית. למידע המדויק והעדכני ביותר, עיין בגרסה האנגלית.