Skip to main content

deligenius

Lightweight Deno middleware framework

Features

  • Light weight (11kb)
  • Near deno http module performance
  • Body parser middleware option
  • Gentle error handling

Quick Start

Hello World example

  1. Use your favourite editor, copy below to app.ts
// ./app.ts
import { Application } from "https://raw.githubusercontent.com/deligenius/dg.ts/master/mod.ts";

let app = new Application({ port: 8000 }).listen();

app.use((ctx) => {
  ctx.send("Hello World!");
});
  1. Run program with
> deno run --allow-net ./app.ts

Router

If you write code in the express.js way, it’s recommended to use Router, as it comes with restful methods: get, post, put, delete

import {
  Application,
  Router,
} from "https://raw.githubusercontent.com/deligenius/dg.ts/master/mod.ts";

let app = new Application({ port: 8000 }).listen();
let router = new Router("/");

app.use(router);

router.get("/", ({ req, res }, next) => {
  res.send("You reached " + req.url);
});

🔝

Use BodyParser

dg.ts has a separate middleware module: bodyParser, which can be used to parse parameter, query, json etc,. We will use mid from bodyParser which includes many pre-configured middlewares for dg.ts

Get query parameter

import {
  Application,
  Router,
} from "https://raw.githubusercontent.com/deligenius/dg.ts/master/mod.ts";
import { mid } from "https://raw.githubusercontent.com/deligenius/bodyparser/master/mod.ts";

let app = new Application({ port: 8000 }).listen();

app.use(mid.query(), (ctx) => {
  let query = ctx.req.query;
  ctx.send(query);
});

Get json data

app.use(mid.json(), (ctx) => {
  let json = ctx.req.json;
  ctx.send(json);
});

Get params

app.use(mid.params("/:name/:age"), (ctx) => {
  let params = ctx.req.params;
  ctx.send(params);
});

Get multipart/form-data

Get urlencoded form data

app.use(mid.urlencoded(), (ctx) => {
  let urlencoded = ctx.req.urlencoded;
  ctx.send(urlencoded);
});

🔝

Error handling

dg.ts has a default error handler handleError in every Application and Router

Error handling In middleware

app.use(async (ctx, next) => {
  try {
    methodThrowError()
  } catch (e) {
    console.log(e);
  }
});

Throw HttpError

  • All the throw new HttpError(message, statusCode) will be handled by the app.handleError or router.handleError
app.use(async (ctx, next) => {
  throw new HttpError("no user found", 404)
});

Override errorHandler

  • app.errorHandler and router.errorHandler can be override
app.handleError = (err, ctx) => {
  if (err instanceof HttpError) {
    ctx.status(err.status).send("http error");
  } else {
    ctx.send("some other error");
  }
};

🔝

Contributors

@gjuoun