لوگوی فریم‌ورک Fusion ساخته Cipher UnitFusion

Middleware

Middleware سراسری و روی route برای Node.js — بدون پیش‌فرض فریم‌ورک

نمای کلی

همان مدل Python:

(request, callNext) => response | callNext(request)

هیچ middleware پیش‌فرضی نیست. سراسری در main.ts ثبت کنید یا per-route با route(..., { middleware, roles }).

دو لایه

  1. Global — app.use(mw) از آرایهٔ MIDDLEWARE
  2. Route — middleware: [...] یا roles: [...] روی route

ترتیب: اول global، بعد route، بعد handler.

ثبت در main.ts

import { FusionApp, getSettings, settings, bearerJwt } from "fusion-framework";

const MIDDLEWARE = [
  // bearerJwt(), // optional
];

settings.ensureLoaded();
const app = new FusionApp(getSettings());
for (const mw of MIDDLEWARE) app.use(mw);
await app.listen();

نوشتن middleware

function requireApiKey(request, callNext) {
  const key = request.headers?.["x-api-key"];
  if (key !== "secret") {
    return { status: 401, body: { detail: "invalid api key" } };
  }
  return callNext(request);
}

داده را از طریق request.state به اشتراک بگذارید (اگر نباشد ساخته می‌شود). Handlerها از this.state می‌خوانند.

Middleware / roles سطح route

route("/api/admin", { roles: ["admin", "super_admin"] })(
  class AdminModule extends FusionBaseApi {
    get() {
      return this.response({ user: this.state.jwt?.sub });
    }
  },
);

ابزارها:

import { bearerJwt, requireRoles } from "fusion-framework";

bearerJwt({ verify, stateKey: "jwt", header: "Authorization" });
requireRoles("admin");
requireRoles({ roles: ["admin"], claim: "roles", stateKey: "jwt" });

bearerJwt پیش‌فرض payload JWT را بدون verify رمزنگاری، با base64url decode می‌کند — برای production مقدار verify بدهید.

Async

Middleware می‌تواند async باشد و await callNext(request) کند. Handlerها هم می‌توانند async باشند.

در این صفحه