NHttp

License deno.land PRs Welcome deps badge cache badge nest.land

Fast http framework for Deno, Deno Deploy and Cloudflare Workers.

Note: Deno native HTTP/2 Hyper requires Deno version 1.9.0 or higher.

Features

  • HTTP/2 support.
  • Middleware support.
  • Router support.
  • Includes body parser (json, urlencoded, raw, multipart).
  • Return directly on handlers.
  • No third party modules and no std/lib by default.
  • Easy deploy to Deno Deploy and Cloudflare Workers.

See examples

Benchmark

Here the simple benchmark.

autocannon -c 100 http://localhost:8080/hello

Name Req/sec Throughput
Native 21433 2.5 MB
NHttp 21127 2.5 MB
std/http 14569 626 KB

Note: maybe not relevant if compared with std/http or other Deno framework using std/http. nhttp uses native deno http.

for cloudflare workers visit => https://nhttp.deno.dev/docs/usage/cloudflare-workers

Installation

deno.land

import { NHttp } from "https://deno.land/x/nhttp@1.1.3/mod.ts";

nest.land

import { NHttp } from "https://x.nest.land/nhttp@1.1.3/mod.ts";

Usage

import { NHttp } from "https://deno.land/x/nhttp@1.1.3/mod.ts";

const app = new NHttp();

app.get("/", (rev) => {
  return "Hello World";
  // return { name: "john" };
  // return new Response("Hello World");
  // return rev.response.send("Hello World");
});

app.listen(8080, () => {
  console.log("> Running on port 8080");
});

METHOD => get | post | put | patch | delete | any | head | options.

app[METHOD](path: string, ...handlers)

Run

deno run --allow-net yourfile.ts

Middleware Example

app.use(...handlers) or app.use([fn1, fn2])

import { NHttp } from "https://deno.land/x/nhttp@1.1.3/mod.ts";

new NHttp()
  .use((rev, next) => {
    rev.foo = "foo";
    return next();
  })
  .get("/", ({ foo }) => {
    return foo;
  })
  .listen(8080);

Router Example

app.use(router | router[]) or app.use(basePath, router | router[])

import { NHttp, Router } from "https://deno.land/x/nhttp@1.1.3/mod.ts";

//user router example with base
const user = new Router({ base: "/user" }); // base optional
user.get("/", ...handlers);
user.get("/:id", ...handlers);
user.post("/", ...handlers);
user.put("/:id", ...handlers);
user.delete("/:id", ...handlers);

//item router example without base
const item = new Router();
item.get("/item", ...handlers);
item.get("/item/:id", ...handlers);
item.post("/item", ...handlers);
item.put("/item/:id", ...handlers);
item.delete("/item/:id", ...handlers);

new NHttp()
  // register router
  .use("/api/v1", [user, item])
  .listen(8080);

now, you can access with http://localhost:8080/api/v1/user

Full Documentation NHttp

https://nhttp.deno.dev

or

https://nhttp.herudi.workers.dev

Want to contribute to this project? I gladly welcome it.

  • Please fork.
  • Create a branch.
  • Commit changes (before commit, please format the code with the command deno fmt in the src folder).
  • Push to the created branch.
  • Make a PR (Pull Requests).
  • Thanks.

List

  • Server App
  • Middleware
  • Router
  • Body Parser
  • Examples
  • Doc
  • Deno lint
  • Unit Test

License

MIT