Skip to main content
Esta página faz parte de uma habilidade de agente de código IA e é escrita para agentes, não para humanos. Para a documentação legível por humanos da Base44, veja a documentação para desenvolvedores.

Criando Funções

As funções Base44 são funções de backend serverless que rodam no Deno. Elas são definidas localmente no seu projeto e implantadas no backend Base44.

Diretório de funções

Todas as definições de função devem ser colocadas na pasta base44/functions/ no seu projeto. A função mais simples é uma pasta com um arquivo entry.ts ou entry.js dentro dela. Estrutura de exemplo:
my-app/
  base44/
    functions/
      process-order/
        entry.ts
      send-notification/
        entry.ts

Como criar uma função

  1. Crie um novo diretório em base44/functions/ com o nome da sua função (use kebab-case)
  2. Crie entry.ts (ou entry.js) nesse diretório
  3. Implante a função usando a CLI

Descoberta de funções

A CLI descobre funções a partir de arquivos entry.ts ou entry.js. Uma pasta que contém um desses arquivos é uma função:
base44/
  functions/
    process-order/
      entry.ts
O nome da função é o caminho da raiz de funções até essa pasta. Por exemplo:
ArquivoNome da função
base44/functions/process-order/entry.tsprocess-order
base44/functions/orders/process/entry.tsorders/process
Regras:
  • entry.ts ou entry.js deve estar dentro de uma subpasta nomeada, não diretamente em base44/functions/
  • todos os arquivos *.js, *.ts e *.json sob a pasta da função são incluídos ao implantar
  • caminhos de função com um ponto em qualquer segmento de caminho são ignorados

Arquivo de ponto de entrada

As funções rodam no Deno e devem exportar usando Deno.serve(). Use o prefixo npm: para pacotes 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
  });
});

Objeto Request

A função recebe um objeto Request padrão do Deno:
  • req.json() - Analisa o corpo JSON
  • req.text() - Obtém o corpo de texto bruto
  • req.headers - Acessa cabeçalhos da solicitação
  • req.method - Método HTTP

Objeto Response

Retorne usando Response.json() para respostas 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 });

Exemplo completo

Estrutura de diretórios

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

Usando acesso Service Role

Para operações em nível de administrador, use 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 });
});

Usando segredos

Acesse variáveis de ambiente configuradas no painel do aplicativo:
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());
});

Convenções de nomenclatura

  • Nome do diretório: Use kebab-case (por exemplo, process-order, send-notification)
  • Nome da função: Vem do caminho do diretório em base44/functions/
    • Válido: process-order, orders/process, send_notification, myFunction
    • Inválido: process.order, send.notification.v2
  • Arquivo de entrada: Use entry.ts ou entry.js

Implantando funções

Depois de criar sua função, implante-a na Base44:
npx base44 functions deploy
Para mais detalhes sobre implantação, veja functions-deploy.md.

Notas

  • As funções rodam no runtime Deno, não no Node.js
  • Use o prefixo npm: para pacotes npm (por exemplo, npm:@base44/sdk)
  • Use createClientFromRequest(req) para obter um cliente que herda o contexto de autenticação do chamador
  • Configure segredos pelo painel do aplicativo para chaves de API
  • Certifique-se de tratar erros graciosamente e retornar códigos de status HTTP apropriados

Erros comuns

ErradoCorretoPor quê
base44/functions/myFunction.js (arquivo único)base44/functions/my-function/entry.tsAs funções devem estar em um subdiretório nomeado
base44/functions/entry.tsbase44/functions/my-function/entry.tsO nome da função vem do caminho do subdiretório
import { ... } from "@base44/sdk"import { ... } from "npm:@base44/sdk"O Deno requer o prefixo npm: para pacotes npm
Diretório MyFunction ou myFunctionDiretório my-functionUse kebab-case para nomes de diretório
Esta página foi traduzida usando IA. Para informações mais precisas e atualizadas, consulte a versão em inglês.