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#
npm install @bext/express
Dépendances homologues : express >= 4.0.0
Intergiciel#
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#
app.use(bextMiddleware({
baseUrl: "http://127.0.0.1:3061",
}));
Client autonome#
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 :
interface BextCache {
invalidateTag(tag: string): Promise<void>;
invalidatePath(path: string): Promise<void>;
flush(): Promise<void>; // Purge entire cache
}
Magasin KV#
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 :
// 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#
await req.bext.realtime.publish("orders", { id: 123, status: "shipped" });
Tâches#
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 :
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.
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.bextbasé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
Links#
- expressjs.com — Documentation du cadre Express