Fastro is web framework for developers who are obsessed with simplicity & performance.
It is inspired by Express & Fastify.
Check these benchmarks to compare its speed with others.
After refactoring, these features will be released in the next version:
- Dependency injection
- Command line interface (CLI)
- Cloud function
Table of contents
Benchmarks
Go to this folder to check detailed methods & results.
Framework | Version | Requests/s | Percentage |
---|---|---|---|
Deno http | 1.1.3 | 16773.2 | 100.0% |
Node http | 14.3.0 | 15651.2 | 93.3% |
Fastro | 0.13.10 | 15459.6 | 92.2% |
Fastify | 2.15.1 | 12636.2 | 75.3% |
Abc | 1.0.0 | 11059.4 | 65.9% |
Oak | 5.2.0 | 10927.8 | 65.2% |
Express | 4.17.1 | 6973.3 | 41.6% |
PHP | 7.3.11 | 5331.2 | 31.8% |
Python Flask | 1.1.2 | 493.3 | 2.9% |
How to use
This module uses the git release. The latest version url is:
https://raw.githubusercontent.com/fastrodev/fastro/v0.13.10/mod.ts
If you don't use the version, just follow the sample code. This uses the master
branch.
import { Fastro } from "https://fastro.dev/mod.ts";
const server = new Fastro();
server.get("/", (req) => req.send("root"));
await server.listen();
Breaking changes may be made without warning. So, run this command to reload the latest code and try directly.
deno run --reload --allow-net https://fastro.dev/examples/basic.ts
Server Options
Server options are used to enable the use of payload
, logger
, and static files
.
Static Files
You can enable the use of static files
by defining the server option to {static: true}
.
const server = new Fastro({ static: true });
server.static("public")
Payload
You can enable the use of payload
by defining the server option to {payload: true}
.
const server = new Fastro({ payload: true });
server.post("/hello", (req) => {
const payload = req.payload;
req.send(payload);
});
Since v0.13.8
, it has supported multipart/form-data
& application/x-www-form-urlencoded
. So you can directly get payload from posting files. Check this file to see the example of usage.
Logger
You can enable the use of logger
by defining the server option to {logger: true}
.
const server = new Fastro({ logger: true });
You can also enable all server options at once:
const server = new Fastro({ payload: true, static: true, logger: true });
Middleware
You can add new properties or functions for global or specific URL to the default request
. This is similar to the express middleware.
const middleware = (req: Request) => {
req.root = () => req.send("root");
};
server
.use(middleware)
.get("/", (req) => req.root());
Plugin
You can add new properties or functions to the fastro instance. You can also use all default instance functions, create routes & middleware. This is similar to the fastify plugin.
const routes = function (fastro: Fastro, done: Function) {
fastro
.get("/", (req) => req.send("root"))
.post("/", (req) => req.send("post"))
.put("/", (req) => req.send("put"))
.delete("/", (req) => req.send("delete"));
done();
};
server.register(routes);
Examples
Run this command to try directly.
deno run -A https://fastro.dev/examples/hello.ts
Just replace hello.ts
with one of the following files.
Title | File |
---|---|
Create hello world app | hello.ts |
Use the basics | basic.ts |
Get url parameter | basic.ts |
Get a payload | basic.ts |
Send results as a file | basic.ts |
Serve static files | static.ts |
Create a middleware | middleware.ts |
Create plugins & routers | plugin.ts |