All Projects → nhttp → nhttp

nhttp / nhttp

Licence: MIT License
An Simple http framework for Deno, Deno Deploy and Cloudflare Workers. so hot 🚀

Programming Languages

typescript
32286 projects
javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to nhttp

http4ts
Server as a Function http toolkit for TypeScript & JavaScript
Stars: ✭ 30 (+15.38%)
Mutual labels:  http-server, deno
Oak
A middleware framework for handling HTTP with Deno 🐿️ 🦕
Stars: ✭ 3,799 (+14511.54%)
Mutual labels:  http-server, deno
tinyhttp
🦕 Deno port of tinyhttp, 0-legacy, tiny & fast web framework
Stars: ✭ 84 (+223.08%)
Mutual labels:  http-server, deno
aqua
A minimal and fast 🏃 web framework for Deno
Stars: ✭ 219 (+742.31%)
Mutual labels:  http-server, deno
ts-httpexceptions
🚦 See https://tsed.io/docs/exceptions.html
Stars: ✭ 24 (-7.69%)
Mutual labels:  http-server
foxy
Session-based Beast/Asio wrapper requiring C++14
Stars: ✭ 61 (+134.62%)
Mutual labels:  http-server
deno deploy versailles
凡尔赛语录(部署在 Deno Deploy)
Stars: ✭ 18 (-30.77%)
Mutual labels:  deno
scuttlesaurus
retog.github.io/scuttlesaurus/
Stars: ✭ 21 (-19.23%)
Mutual labels:  deno
dndb
A Deno 🦕 persistent, embeddable and optimized NoSQL database for JS & TS
Stars: ✭ 64 (+146.15%)
Mutual labels:  deno
pbkit
protobuf toolkit for typescript and others
Stars: ✭ 173 (+565.38%)
Mutual labels:  deno
go-fileserver
A simple HTTP Server to share files over WiFi via Qr Code
Stars: ✭ 68 (+161.54%)
Mutual labels:  http-server
deno desktop
Windowing support for Deno WebGPU.
Stars: ✭ 49 (+88.46%)
Mutual labels:  deno
deno-debug
Debugging utility for deno. Ported from https://npmjs.com/debug
Stars: ✭ 15 (-42.31%)
Mutual labels:  deno
http-live-simulator
A simple HTTP Server that serves with random delay for live simulation
Stars: ✭ 58 (+123.08%)
Mutual labels:  http-server
Uwuifier-node
This repository contains the Uwuifier package! It's written in Deno with TypeScript and compiled into JavaScript for NPM, makes use of Jest for testing the code and is deployed on NPM and https://deno.land.
Stars: ✭ 48 (+84.62%)
Mutual labels:  deno
deno-x-ranking
🦕 Deno Third Party Modules Ranking 👑
Stars: ✭ 28 (+7.69%)
Mutual labels:  deno
deno2node
Compile your Deno project to run on Node.js.
Stars: ✭ 66 (+153.85%)
Mutual labels:  deno
pipelinit-cli
Automatically generates pipelines for your project.
Stars: ✭ 36 (+38.46%)
Mutual labels:  deno
DataXServer
为DataX(https://github.com/alibaba/DataX) 提供远程多语言调用(ThriftServer,HttpServer) 分布式运行(DataX on YARN) 功能
Stars: ✭ 130 (+400%)
Mutual labels:  http-server
cli badges
Generate Badges for your CLI written in 🦕 Deno and TS
Stars: ✭ 20 (-23.08%)
Mutual labels:  deno

logo

NHttp

An Simple http framework for Deno, Deno Deploy and Cloudflare Workers .

ci coverage codefactor denoland deps size licence prs nestland


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

Features

  • Lightweight and Fast. see benchmarks.
  • HTTP/2 support.
  • Middleware support.
  • Router support.
  • Includes body parser (json, urlencoded, raw, multipart).
  • Return directly on handlers.
  • Easy deploy to Deno Deploy and Cloudflare Workers.

See examples

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

Installation

deno.land

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

nest.land

import { NHttp } from "https://x.nest.land/[email protected]/mod.ts";

Usage

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const app = new NHttp();

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

  // or
  // return "Hello World";
  // return { name: "john" };
  // return new Response("Hello World");
});

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

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

app[METHOD](path: string | RegExp, (rev: RequestEvent) => { // code });

// or app[METHOD](path: string | RegExp, ...handlers);

Run

deno run --allow-net yourfile.ts

Route Paths

...

// normal path
app.get("/", () => {...});

// with parameter
app.get("/users/:userId/books/:bookId", (rev) => {
  return rev.params;
});

// with query. /users?name=john&foo[bar]=baz
app.get("/users", (rev) => {
  return rev.query;
});

// with optional parameter. match for /books and /books/bookname 
app.get("/books/:name?", (rev) => {
  return rev.params;
});

// with extension. match for .png and .jpg only
app.get("/image/:filename.(png|jpg)", (rev) => {
  return rev.params;
});

// exact/wild. /users/123
app.any("*", (rev) => {
  return rev.params;
  // => { wild: ["users", "123"] }
});

// exact wild named slug. /users/123
app.any("/:slug*", (rev) => {
  return rev.params;
  // => { slug: ["users", "123"] }
});

// RegExp. match for path includes hello.
app.get(/hello/, (rev) => {
  return rev.path;
});

// RegExp. match for path endsWith ball. ex: /dragonball and /football
app.get(/.*ball$/, (rev) => {
  return rev.path;
});

...

Custom Server

import { serve } from "https://deno.land/[email protected]/http/server.ts";
import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const app = new NHttp();

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

serve((request, conn) => app.handleEvent({ request, conn }));

Middleware Example

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

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const app = new NHttp();

app.use((rev, next) => {
  rev.foo = "foo";
  return next();
});

app.get("/", (rev) => {
  return rev.foo;
});

app.listen(8080);

Header

Example cors in middleware

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const app = new NHttp();

app.use(({ response, request }, next) => {
  // example header
  response.header({
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "*",
    "Access-Control-Allow-Headers": "*",
  });
  if (request.method === "OPTIONS") {
    return response.send();
  }
  return next();
});

app.get("/", () => {
  return "Hello world with cors";
});

app.listen(8080);

Status Code

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const app = new NHttp();

// post with status 201
app.post("/", ({ response }) => {
  // set status
  response.status(201);

  // get status
  const status = response.status();
  console.log("The current status is " + status);

  return "Hello from status " + status;
});

app.listen(8080);

Body

Support json, urlencoded, multipart, raw.

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const app = new NHttp();

app.post("/save", ({ body }) => {
  return body;
});

app.listen(8080);

Upload

Simple multipart upload.

requires --allow-read --allow-write

import { multipart, NHttp } from "https://deno.land/x/[email protected]/mod.ts";

const upload = multipart.upload({
  // required field name
  name: "image",
  dest: "public/images/",

  // optionals
  accept: "png|jpg",
  maxSize: "2 mb",
  required: true,
});

const app = new NHttp();

app.post("/upload", upload, ({ body, file }) => {
  console.log(file.image);
  console.log(body);
  return "Success upload";
});

app.listen(8080);

Router Example

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

import { NHttp, Router } from "https://deno.land/x/[email protected]/mod.ts";

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

//item router example without base
const item = new Router();
item.get("/item", ...handlers);

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

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

Usage With Controller

import { NHttp } from "https://deno.land/x/[email protected]/mod.ts";

import {
  addControllers,
  BaseController,
  Controller,
  Get,
  Post,
  Status,
} from "https://deno.land/x/[email protected]/mod.ts";

@Controller("/user")
class UserController extends BaseController {
  @Get()
  findAll() {
    return { name: "john" };
  }

  @Get("/:id")
  findById() {
    const { params } = this.requestEvent;
    return params;
  }

  @Status(201)
  @Post()
  save() {
    const { body } = this.requestEvent;
    return body;
  }
}

class Application extends NHttp {
  constructor() {
    super();
    const controllers = addControllers([UserController]);
    this.use("/api/v1", controllers);
  }
}

new Application().listen(8080);

visit 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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].