Zentara Corev0.8.6 GitHubnpm

Middleware

Rantai middleware global dan per route.

Middleware bergaya "onion". Kerjakan sesuatu sebelum await next(), lalu kerjakan sesuatu lagi sesudahnya. Kalau middleware mengembalikan nilai tanpa memanggil next(), rantai berhenti di situ.

import { defineMiddleware, HttpError } from "zentara";

export const requireLogin = defineMiddleware(async (ctx, next) => {
  if (!ctx.session.get("userId")) throw new HttpError(401, "Silakan login");
  return next();
});

Ada tiga tempat untuk memasang middleware, dan urutan eksekusinya dari atas ke bawah:

Tempat Cakupan
middleware: [...] di zentara.config.mjs semua request
runtime.use(...) di setup() plugin semua request
src/app/middleware.ts (export default [...]) semua request
export const middleware = [...] di file route hanya route itu

Middleware bawaan:

// src/app/middleware.ts
import { cors, csrf, requestLogger, session } from "zentara";

export default [
  requestLogger(),                                        // GET /api/hello 200 1.2ms
  cors({ origin: ["https://app.contoh.id"], credentials: true }),
  csrf(),                                                 // tolak POST/PUT/PATCH/DELETE lintas origin
  session(),                                              // ctx.session, secret dari SESSION_SECRET
];

Perbaiki halaman ini di GitHub