Skip to main content
Using Deno in production at your company? Earn free Deno merch.
Give us feedback

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 (jsonBody, urlencodedBody, rawBody, multipartBody).
  • 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:3000/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.2/mod.ts";

nest.land

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

Usage

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

const app = new NHttp();

app.get("/", ({ response }) => {
  return response.send("Hello");
});

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

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.2/mod.ts";

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

Router Example

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

import { NHttp, Router } from "https://deno.land/x/nhttp@1.1.2/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(3000);

now, you can access with http://localhost:3000/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