Recipe: Node.js / Express
Connect once at startup
typescript
// src/db.ts
import { createClient, type SchemasToClient } from "mondel";
import { schemas } from "./schemas";
export type DbClient = SchemasToClient<typeof schemas>;
export const db = await createClient({
uri: process.env.MONGODB_URI!,
schemas,
validation: "strict",
options: { maxPoolSize: 20 },
});typescript
// src/server.ts
import express from "express";
import { db } from "./db";
const app = express();
app.use(express.json());
app.get("/users", async (_req, res) => {
const users = await db.users.findMany({}, { limit: 100 });
res.json(users);
});
app.post("/users", async (req, res) => {
try {
const result = await db.users.create(req.body);
res.status(201).json({ id: result.insertedId });
} catch (e) {
res.status(400).json({ error: String(e) });
}
});
const server = app.listen(3000);
async function shutdown() {
await db.close();
server.close();
process.exit(0);
}
process.on("SIGTERM", shutdown);
process.on("SIGINT", shutdown);Deploy indexes separately
bash
npx mondel push --uri "$MONGODB_URI" --schema ./dist/schemas.js --apply-validatorsMiddleware attachment (optional)
typescript
app.use((req, _res, next) => {
(req as any).db = db;
next();
});Prefer importing db directly for clearer typing.
