Nitro is the universal server engine behind Nuxt, Analog, and Vinxi. Its API lets you build server-agnostic backends that deploy anywhere.
Universal Server Routes
// server/routes/hello.ts
export default defineEventHandler((event) => {
return { hello: "world" };
});
// server/routes/users/[id].ts
export default defineEventHandler(async (event) => {
const id = getRouterParam(event, "id");
const query = getQuery(event);
const body = await readBody(event);
const headers = getHeaders(event);
return { id, query };
});
Middleware
// server/middleware/auth.ts
export default defineEventHandler((event) => {
const token = getHeader(event, "authorization");
if (!token) throw createError({ statusCode: 401, message: "Unauthorized" });
event.context.user = verifyToken(token);
});
Storage API: Universal Key-Value
// nitro.config.ts
export default defineNitroConfig({
storage: {
cache: { driver: "redis", url: process.env.REDIS_URL },
data: { driver: "fs", base: "./data" },
assets: { driver: "s3", bucket: "my-bucket" },
},
});
// Usage
export default defineEventHandler(async () => {
await useStorage("cache").setItem("key", { data: "value" }, { ttl: 3600 });
const cached = await useStorage("cache").getItem("key");
const keys = await useStorage("data").getKeys();
return { cached, keys };
});
Scheduled Tasks
export default defineNitroConfig({
scheduledTasks: {
"*/5 * * * *": ["scrape:prices"],
"0 0 * * *": ["cleanup:old-data"],
},
});
// server/tasks/scrape/prices.ts
export default defineTask({
meta: { description: "Scrape product prices" },
run: async () => {
const products = await $fetch("/api/products");
// scrape logic...
return { result: `Scraped ${products.length} products` };
},
});
WebSocket Support
// server/routes/_ws.ts
export default defineWebSocketHandler({
open(peer) { peer.send(JSON.stringify({ type: "connected" })); },
message(peer, message) {
const data = JSON.parse(message.text());
peer.send(JSON.stringify({ echo: data }));
},
close(peer) { console.log("Disconnected:", peer.id); },
});
Deploy Anywhere
export default defineNitroConfig({
preset: "cloudflare-pages" // or node, deno, bun, vercel, netlify, aws-lambda...
});
Build server-side scraping APIs? My Apify tools complement any Nitro backend.
Custom server solution? Email spinov001@gmail.com
Top comments (0)