servest
🌾A progressive http server / router for deno🌾
Usage
Serve API
serve
API is compatible with deno_std@v0.3.2 but has different implementation.
Some progressive features for HTTP/1.1 server are implemented.
- Support Keep-Alive connection
- Support trailer headers
- Support keep-alive timeout and read timeout
serve
is cancellable by cancel promise- Fully interface based type definition
import { serve } from "https://denopkg.com/keroxp/servest@v0.4.0/server.ts";
async function main() {
for await (const req of serve(`0.0.0.0:8899`)) {
await req.respond({
status: 200,
headers: new Headers({
"Content-Type": "text/plain"
}),
body: new TextEncoder().encode("hello")
});
}
}
main();
Router API
Router API is minimal routing system on top of serve()
import { createRouter } from "https://denopkg.com/keroxp/servest@v0.4.0/router.ts";
const router = createRouter();
router.handle("/", async req => {
await req.respond({
status: 200,
headers: new Headers({
"content-type": "text/plain"
}),
body: new TextEncoder().encode("ok")
});
});
router.handle(new RegExp("/foo/(?<id>.+)"), async req => {
const { id } = req.match.groups;
await req.respond({
status: 200,
headers: new Headers({
"content-type": "application/json"
}),
body: new TextEncoder().encode(JSON.stringify({ id }))
});
});
router.listen("127.0.0.1:8898");
Agent API
Agent API is basic HTTP agent. It manages persistent connection to host. Each request will be sent in serial.
NOTE: Currently TLS (HTTPS) agent is not supported as Deno doesn't.
Use fetch
for https request.
GET
import { createAgent } from "https://denopkg.com/keroxp/servest@v0.5.0/agent.ts";
const agent = createAgent("http://127.0.0.1:8700");
const { status, body } = await agent.send("/get?deno=land");
POST
import { createAgent } from "https://denopkg.com/keroxp/servest@v0.5.0/agent.ts";
const { status, headers, body } = await agent.send("/post", {
method: "POST",
headers: new Headers({
"Content-Type": "text/plain"
}),
body: new TextEncoder().encode("deno=land")
});
Loadmaps
- Middleware API for Router
- HTTP/2
License
MIT