Code Monkey home page Code Monkey logo

denotrain's Introduction

denotrain

This is a web server library inspired by expressJS written for node. It supports routers, query parameters and url parameters. The library is desired to use with deno.

Deno Train Logo

Features

Example

Run this example on port 3000 with deno run --allow-net=0.0.0.0 https://deno.land/x/[email protected]/example/routers/example.ts.

Try the following routes:

  • GET /
  • GET /doesnotexist
  • GET /admin
  • GET /17
  • GET /admin/edit
  • POST /formtest

More examples are in this repository under /examples.

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

// Create a new application (port defaults to 3000, hostname to 0.0.0.0)
const app = new Application();
// Optional: Generate router and hook routes to it
const router = new Router();

// Middleware 
app.use((ctx) => {
  // Add data to the response object and return undefined
  // -> Still passed to other handlers

  // Add cookies to the deno train cookie handler
  ctx.cookies["user.session"] = "qwertz";
  ctx.cookies["a"] = "123";
  ctx.cookies["b"] = "456";
  delete ctx.cookies["user.session"];
  return;
});

// this will only listen on GET requests
router.get("/", (ctx) => {
  // Returning a string, JSON, Reader or Uint8Array automatically sets
  // Content-Type header and no further router will match
  return new Promise((resolve) => resolve("This is the admin interface!")); 
});
router.get("/edit", async (ctx) => {
  return "This is an edit mode!"; 
});

app.get("/", (ctx) => {
  // Returning a json
  return {"hello": "world"};
});

// Hook up the router on "/admin". The routes are now
// available on "/admin" and "/admin/edit"
app.use("/admin", router);

app.get("/:id", (ctx) => {
  // Use url parameters
  return "Hello World with ID: " + ctx.req.params.id
});

// Make a post request; try it with sending json or url-form-encoded
// and a corresponding Content-Type header
app.post("/formtest", async (ctx) => {
  return ctx.req.body;
});

// Run the application on the specified port
await app.run();

App Parameters

The constructor of Application accepts an object with options. All options are optional, and defaults are set for many values.

  • port (number, default: 3000) Port of the server.

  • hostname (string, default: 0.0.0.0) Hostname of the server. You also need to permit Deno to serve on this address by --allow-net=0.0.0.0.

  • certFile (string) Path to the HTTPS public certificate. If certFile and keyFile are present, Denotrain will automatically serve the server with HTTPS. You also need to permit Deno to access this file by --allow-read=path/to/file.crt

  • keyFile (string) Path to the HTTPS private key. You also need to permit Deno to access this file by --allow-read=path/to/file.key.

  • additionalServers (ListenOptions[], default: []) An array of objects, each may contain any of the four parameters listed above. It can be used to serve the application on additional servers.

  • logger (Logger, default: new SinkLogger([new ConsoleSink()])) An array of objects, each may contain any of the four parameters listed above. It can be used to serve the application on additional servers.

  • logLevel ("LOG" | "DEBUG" | "INFO" | "WARN" | "ERROR" | "CRITICAL", default: "LOG") All logs that are higher or equal to the specified log level are output. After initializing the application, the log level is set to the specified value. For production environments, "INFO" or "WARN" is recommended. See the documentation for more information.

  • cookieKey (string, default: "train.ticket") The ticket that identifies the client in the CookieStorage is stored as an HTTP cookie. The key of that HTTP cookie is specified here.

  • cookieStorage (CookieStorage, default: new MemoryCookieStorage()) The storage of the cookies in which the keys and their associated values are stored. The default MemoryCookieStorage stores the values only temporarily until a server restart and is therefore not recommended for productive use.

  • cookieOptions (CookieOptions, default: { maxAge: 60 * 60 * 24 }) Each time the HTTP cookie is set for the CookieStorage, HTTP cookie options are set. These can be specified here. More details can be found in the MDN or in the Denotrain documentation.

  • cookieSecret (string, default: "changeThis") To prevent session hijacking, the randomly generated user UUID is mixed with this secret. This prevents simple manipulation of the cookie. This secret should be changed, even in development environments. Furthermore, the secret should not be known to the users of the system.

Documentation

View documentation on the official documentation website.

denotrain's People

Contributors

caesar2011 avatar 0xflotus avatar freakyfelt avatar kanziw avatar lispy avatar diegoquiroz avatar omaralmgerbie avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.