swork-router
TypeScript icon, indicating that this package has built-in type declarations

1.3.3 • Public • Published

swork-router

npm travis ci coverage download Greenkeeper badge

swork-router is router middleware for swork powered by path-to-regexp. It is built with TypeScript and async methods.

License

MIT

Installation

npm install swork-router

yarn add swork-router

Example

import { Swork, FetchContext } from "swork";
import { Router } from "swork-router";
 
const app = new Swork();
const router = new Router();
 
router.get("/hello/:id", (context: FetchContext) => {
    context.response = new Response(`world id: ${context.params.id}`);
});
 
app.use(router.routes());
 
app.listen();

Methods

get | post | put | patch | delete | head | options | all

Create a route using the HTTP verb as your method name such as router.get(...) or router.post(...). In addition, all is available to match on all HTTP verbs.

router.get("/foos", async (context: FetchContext, next: () => Promise<void>) => {
    // manipulate request
    const response = await next();
    // manipulate or cache response
    context.response = response;
});

You are able to pass in a single path or an array of paths with the middleware to be invoked when a path is matched.

router.get(["/foos", "/foos/:id"], (context) => {...});

Every verb method returns the router instance allowing chaining of path handlers.

router
    .get("/foos", (context) => {...})
    .post("/foos", (context) => {...})
    .all("/foos/:id", (context) => {...});

Route paths must start with a slash and end without one. Paths are translated to regular expressions using path-to-regexp. As a result, query strings are not evaluated when matching requests.

use

use allows the nesting of routers. This is useful when building a routes in a separate module.

const router = new Router({ prefix: "/api" });
 
router.use(getFooApiRouter());
router.use(getBarApiRouter());
 
app.use(router.routes());

Configuration

Prefix

Routes can be prefixed at the router level.

const router = new Router({
    prefix: "/foos"
});
 
router.get("/", ...); // responds to "/foos"
router.put("/:id", ...); // responds to "/foos/:id"

Origin

Alternate origins can be used but default to configuration.origin from swork.

const router = new Router({
    origin: "https://www.hello.com"
});
 
router.get("/world", () => { ... });

Url Parameters

Named route parameters are captured and added to context.params property.

router.put("/:id/:name", (context: FetchContext) => {
    console.log(context.params);
    // => { id: 99, name: "Jane" }
});

Contact

If you are using swork or any of its related middlewares, please let me know on gitter. I am always looking for feedback or additional middleware ideas.

Package Sidebar

Install

npm i swork-router

Weekly Downloads

1

Version

1.3.3

License

MIT

Unpacked Size

16.6 kB

Total Files

5

Last publish

Collaborators

  • justin-arch-sw