API Routes
File-based API routing with HTTP method support and dynamic parameters.
api/hello.ts
import { defineHandler } from "nitro/h3";
export default defineHandler(() => "Nitro is amazing!");
Nitro supports file-based routing in the api/ or routes/ directory. Each file becomes an API endpoint based on its path.
Basic Route
Create a file in the api/ directory to define a route. The file path becomes the URL path:
hello.ts
import { defineHandler } from "nitro/h3";
export default defineHandler(() => "Nitro is amazing!");
This creates a GET /api/hello endpoint.
Dynamic Routes
Use square brackets [param] for dynamic URL segments. Access params via event.context.params:
[name].ts
import { defineHandler } from "nitro/h3";
export default defineHandler((event) => `Hello (param: ${event.context.params!.name})!`);
This creates a GET /api/hello/:name endpoint (e.g., /api/hello/world).
HTTP Methods
Suffix your file with the HTTP method (.get.ts, .post.ts, .put.ts, .delete.ts, etc.):
GET Handler
test.get.ts
import { defineHandler } from "nitro/h3";
export default defineHandler(() => "Test get handler");
POST Handler
test.post.ts
import { defineHandler } from "h3";
export default defineHandler(async (event) => {
const body = await event.req.json();
return {
message: "Test post handler",
body,
};
});