ENbext.dev
DocumentationIntégrations de frameworks

Traduction automatique depuis l’anglais. Consulter l’original.

Sur cette page

Intégration Express

Le package @bext/express fournit un middleware Express qui injecte les services bext dans req.bext, ainsi qu'un client autonome.

Installation#

bash
npm install @bext/express

Dépendances homologues : express >= 4.0.0

Intergiciel#

typescript
import express from "express";
import { bextMiddleware } from "@bext/express";

const app = express();
app.use(express.json());
app.use(bextMiddleware());

app.post("/api/articles", async (req, res) => {
  const article = await db.articles.create(req.body);

  // Invalidate cached article pages
  await req.bext.cache.invalidateTag("articles");

  // Push real-time event
  await req.bext.realtime.publish("articles", { action: "created", article });

  res.status(201).json(article);
});

app.listen(3000);

Configuration personnalisée#

typescript
app.use(bextMiddleware({
  baseUrl: "http://127.0.0.1:3061",
}));

Client autonome#

typescript
import { createBextClient } from "@bext/express";

const bext = createBextClient();
await bext.cache.invalidateTag("products");
await bext.kv.set("counter", 42, { ttl: 3600 });

Référence API#

Cache#

L'adaptateur Express inclut une méthode flush() supplémentaire :

typescript
interface BextCache {
  invalidateTag(tag: string): Promise<void>;
  invalidatePath(path: string): Promise<void>;
  flush(): Promise<void>;  // Purge entire cache
}

Magasin KV#

typescript
await req.bext.kv.set("user:prefs", { theme: "dark" }, { ttl: 86400 });
const prefs = await req.bext.kv.get("user:prefs");
await req.bext.kv.delete("user:prefs");

Files d'attente#

L'adaptateur Express prend en charge des options de file d'attente supplémentaires :

typescript
// Enqueue with delay and retry limit
await req.bext.queue.push("notifications", payload, {
  delay: 60,        // delay 60 seconds before first delivery
  maxRetries: 3,    // retry up to 3 times before dead-lettering
});

// Pull and acknowledge
const msg = await req.bext.queue.pull("notifications");
if (msg) {
  console.log(msg.payload, msg.attempts);
  await req.bext.queue.ack("notifications", msg.id);
}

En temps réel#

typescript
await req.bext.realtime.publish("orders", { id: 123, status: "shipped" });

Tâches#

typescript
await req.bext.tasks.register("nightly-cleanup", {
  cron: "0 2 * * *",
  command: "http://localhost:3000/api/cron/cleanup",
});

const tasks = await req.bext.tasks.list();
await req.bext.tasks.cancel("nightly-cleanup");

TypeScript#

Le middleware augmente globalement le type Request de Express :

typescript
declare global {
  namespace Express {
    interface Request {
      bext: BextClient;
    }
  }
}

Aucune configuration de type supplémentaire n'est nécessaire : req.bext est entièrement typé après l'importation du middleware.

Conseil

L'adaptateur Express expose une méthode cache.flush() qui purge l'intégralité du cache Edge de l'application : utilisez-la avec précaution. Les adaptateurs Hono et Next.js n'incluent pas cette méthode ; utilisez plutôt invalidateTag / invalidatePath pour des purges ciblées.

En rapport#

  • Intégration Hono — alternative plus légère avec API c.var.bext basée sur le contexte
  • Présentation des frameworks — règles de détection automatique et sélection du bon adaptateur
  • Mise en cache — TTL, périmé pendant la revalidation et fonctionnement de l'invalidation des balises/chemins
  • Des flux durables — création de pipelines d'arrière-plan fiables avec la file d'attente
  • Tâches planifiées — enregistrement des tâches périodiques à partir des gestionnaires Express
Modifier cette page ↗Besoin d’aide ? ↗
Rechercher dans la documentation

Saisissez un sujet, une commande ou une question.