Express Integration
Mount a REST API and the dashboard into an Express app.
Mount a REST API and the dashboard into an Express app.
Peer dependency: express. Import from the @byteveda/flexiq/contrib/express
subpath.
import express from "express";
import { flexiqRouter, flexiqDashboard } from "@byteveda/flexiq/contrib/express";
const app = express();
// REST API — mounted at /tasks
app.use("/tasks", flexiqRouter(queue));
// Dashboard SPA — mounted at /admin
app.use("/admin", flexiqDashboard(queue));
app.listen(3000);JSON body parsing is mounted internally on the router.
| Method | Path | Description |
|---|---|---|
POST | /enqueue | Enqueue a job. Body: { task, args?, options? }. Returns { jobId } with status 201. |
GET | /stats | Overall queue statistics. |
GET | /stats/queues?queue= | Per-queue statistics. |
GET | /jobs/:id | Fetch a job by ID. |
GET | /jobs/:id/errors | Error history for a job. |
GET | /jobs/:id/result?timeoutMs= | Wait for a result (long-poll). timeoutMs is clamped to resultTimeoutMs. |
POST | /jobs/:id/cancel | Request cancellation. |
GET | /dead-letters?limit=&offset= | List dead-lettered jobs. |
POST | /dead-letters/:id/retry | Retry a dead-lettered job. |
GET | /health | Liveness probe — always { status: "ok" }. |
GET | /readiness | Readiness probe: storage, workers, resources. 503 when degraded. |
GET | /resources | Worker-resource health aggregated across live workers. |
flexiqRouter options| Option | Type | Default | Description |
|---|---|---|---|
includeRoutes | string[] | all | Route names to expose (see below). |
excludeRoutes | string[] | none | Route names to suppress. |
resultTimeoutMs | number | 5000 | Ceiling for /jobs/:id/result; a client timeoutMs above this is clamped down to it. |
Route names: enqueue, stats, queue-stats, job, job-errors,
job-result, cancel, dead-letters, retry-dead, health, readiness,
resources.
The probe routes are the standalone checkHealth() / checkReadiness(queue)
helpers — call them directly if you'd rather serve probes on your own paths.
See Monitoring.
flexiqDashboard(queue, { staticDir? }) returns a request handler that serves
the built dashboard SPA and proxies /api/* to the queue. Mount it under a path
prefix:
app.use("/admin", flexiqDashboard(queue));The SPA assets must be built first: pnpm build:dashboard. The built files
land in node_modules/@byteveda/flexiq/static/dashboard by default; pass
staticDir to point elsewhere.