Fastro
Fast and simple web application framework with native Deno Request and Response.
- Getting started
- Custom port
- Routing
- Route Parameters
- Router Middleware
- Router Middleware with Array
- Application Level Middleware
- Application Level Middleware with Array
- Route Level Middleware
- Route Level Middleware with Array
- Render with Eta template engine
- Benchmarks
Getting started
import application from "https://fastro.dev/server/mod.ts";
const app = application();
app.get("/", () => new Response("Hello world"));
console.log("Listening on: http://localhost:8000");
await app.serve();
deno run -A https://fastro.dev/examples/main.ts
Custom port
import application from "https://fastro.dev/server/mod.ts";
const app = application();
app.get("/", () => new Response("Hello world!"));
await app.serve({ port: 3000 });
deno run -A https://fastro.dev/examples/custom_port.ts
Routing
import application from "https://fastro.dev/server/mod.ts";
const app = application();
app.get("/abcd", () => new Response("/abcd"));
app.get("/ef?gh", () => new Response("/ef?gh"));
app.get("/ij+kl", () => new Response("/ij+kl"));
app.get("/mn*op", () => new Response("mn*op"));
app.get("/qr(st)?u", () => new Response("qr(st)?u"));
app.get(/v/, () => new Response("/v/"));
app.get(/.*fast$/, () => new Response("/.*fast$/"));
await app.serve();
deno run -A https://fastro.dev/examples/routing.ts
Route parameters
import application, {
getParam,
getParams,
} from "https://fastro.dev/server/mod.ts";
const app = application();
app.get("/:id/user/:name", (req: Request) => {
const params = getParams(req);
return new Response(JSON.stringify({ params }));
});
app.get("/post/:id", (req: Request) => {
const param = getParam("id", req);
return new Response(param);
});
await app.serve();
deno run -A https://fastro.dev/examples/route_params.ts
Router Middleware
import application, { ConnInfo, Next } from "https://fastro.dev/server/mod.ts";
const app = application();
app.get("/efgh", (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #1");
next();
}, () => new Response("Route level middleware #1"));
app.get("/ijkl", (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #1");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #2");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #3");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #4");
next();
}, () => new Response("Route level middleware #2"));
await app.serve();
deno run -A https://fastro.dev/examples/router_middleware.ts
Router Middleware with Array
import application, {
ConnInfo,
Next,
router,
} from "https://fastro.dev/server/mod.ts";
const app = application();
const r = router();
const middlewares = [(_req: Request, _connInfo: ConnInfo, next: Next) => {
console.log("v2 - 1");
next();
}, (_req: Request, _connInfo: ConnInfo, next: Next) => {
console.log("v2 - 2");
next();
}];
r.get("/", () => new Response("Get"))
.post("/", () => new Response("Post"))
.put("/", () => new Response("Put"))
.delete("/", () => new Response("Delete"));
app.use("/v1", r);
app.use("/v2", middlewares, r);
await app.serve();
deno run -A https://fastro.dev/examples/router_middleware_with_array.ts
Application Level Middleware
import application, { ConnInfo, Next } from "https://fastro.dev/server/mod.ts";
const app = application();
app.use((_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #1");
next();
});
app.use((_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #2");
next();
});
app.use((_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #3");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #4");
next();
});
app.get("/", () => new Response("App level #1"));
await app.serve();
deno run -A https://fastro.dev/examples/application_level_middleware.ts
Application Level Middleware with Array
import application, { ConnInfo, Next } from "https://fastro.dev/server/mod.ts";
const app = application();
const middlewares = [(_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #1");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #2");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #3");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #4");
next();
}];
app.use(middlewares);
app.get("/", () => new Response("App level #1"));
await app.serve();
deno run -A https://fastro.dev/examples/application_level_middleware_with_array.ts
Route Level Middleware
import application, { ConnInfo, Next } from "https://fastro.dev/server/mod.ts";
const app = application();
app.use((_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #1");
next();
});
app.use((_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #2");
next();
});
app.use((_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #3");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("app middleware #4");
next();
});
app.get("/", () => new Response("App level #1"));
await app.serve();
deno run -A https://fastro.dev/examples/route_level_middleware.ts
Route Level Middleware with Array
import application, { ConnInfo, Next } from "https://fastro.dev/server/mod.ts";
const app = application();
const middlewares = [(_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #1");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #2");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #3");
next();
}, (_req: Request, _conn: ConnInfo, next: Next) => {
console.log("middleware #4");
next();
}];
app.get("/mnop", middlewares, () => new Response("Route level middleware #3"));
await app.serve();
deno run -A https://fastro.dev/examples/route_level_middleware_with_array.ts
Render with ETA template engine
import application from "https://fastro.dev/server/mod.ts";
import { render } from "https://deno.land/x/eta@v1.12.3/mod.ts";
const app = application();
const headers = new Headers();
headers.set("Content-Type", "text/html; charset=UTF-8");
app.get("/", () => {
const html = <string> render(
"<h4>The answer to everything is <%= it.answer %></h4>",
{
answer: 42,
},
);
return new Response(html, { headers });
});
console.log("Listening on: http://localhost:8000");
app.serve();