Skip to content

Quick Start — Node.js

Job definitions and client creation are identical to Next.js — just import from @queuebase/node instead of @queuebase/nextjs.

Terminal window
npm install @queuebase/node zod
src/jobs/index.ts
import { createJobRouter, job } from "@queuebase/node";
import { z } from "zod";
export const jobs = createJobRouter({
sendEmail: job({
input: z.object({
to: z.string().email(),
subject: z.string(),
body: z.string(),
}),
handler: async ({ input, jobId, attempt }) => {
// your logic here
return { sent: true };
},
defaults: {
retries: 3,
backoff: "exponential",
},
}),
});
export type JobRouter = typeof jobs;
src/jobs/client.ts
import { createClient } from "@queuebase/node";
import { jobs } from "./index";
export const jobClient = createClient(jobs, {
apiUrl: process.env.QUEUEBASE_API_URL ?? "http://localhost:3847",
apiKey: process.env.QUEUEBASE_API_KEY,
callbackUrl:
process.env.QUEUEBASE_CALLBACK_URL ??
"http://localhost:3000/api/queuebase",
});

createNodeHandler works with Node’s http.IncomingMessage/ServerResponse:

import { createNodeHandler } from "@queuebase/node";
import { jobs } from "./jobs";
const handler = createNodeHandler(jobs);
import express from "express";
import { createNodeHandler } from "@queuebase/node";
import { jobs } from "./jobs";
const app = express();
const handler = createNodeHandler(jobs);
// Use express.raw() so the body isn't pre-parsed as JSON
app.post("/api/queuebase", express.raw({ type: "*/*" }), (req, res) => {
handler(req, res);
});
import Fastify from "fastify";
import { createNodeHandler } from "@queuebase/node";
import { jobs } from "./jobs";
const fastify = Fastify();
const handler = createNodeHandler(jobs);
fastify.post("/api/queuebase", (req, reply) => {
handler(req.raw, reply.raw);
});
import { jobClient } from "./jobs/client";
const { jobId, getStatus } = await jobClient.sendEmail.enqueue({
to: "user@example.com",
subject: "Welcome",
body: "Hello!",
});
Terminal window
npx queuebase dev

Start your app in another terminal and you’re ready to go.