5.0.12 • Published 9 months ago

@miqro/core v5.0.12

Weekly downloads
528
License
ISC
Repository
-
Last release
9 months ago

@miqro/core

promise based router

router

import {createServer} from "http";
import {Router, JSONParser} from "@miqro/core";

const router = new Router();

router.post("/echo", [JSONParser(), async (ctx) => {
  // the IncomingMessage is in ctx.req
  // the ServerResponse is in ctx.res
  ctx.logger.info("we got a echo request hit with query: %o params: %o body: %o", ctx.query, ctx.params, ctx.body);
  await ctx.json({
    body: ctx.body
  });
}]);
router.get("/user/:userId", async (ctx) => {
  await ctx.json({
    userId: ctx.params.userId
  });
});
router.use(async (ctx) => {
  await ctx.end({
    headers: {
      ["Content-Type"]: "plain/text; charset=utf-8"
    },
    status: 404,
    body: "NOT FOUND"
  });
});

const server = createServer(router.listener).listen(8080);

request parsing

for more examples of parsing see @miqro/parser

router.get("/add/:a/:b", {
  request: {
    body: false, // do not allow body
    params: {
      a: "number", // parse param :a to a number if posible if not throw
      b: "number", // parse param :b to a number if posible if not throw
    },
    query: {
      decimals: "boolean?|number?", // two optional posible parsing types
      format: {
        type: "enum?", // optional enum
        enumValues: ["number", "text"],
        defaultValue: "number"
      }
    }
  },
  handler: async (ctx) => {
    // ctx.params.a and ctx.params.b are numbers and not strings
    const result = ctx.params.a + ctx.params.b;
    ctx.logger.info("adding %s + %s = %s", ctx.params.a, ctx.params.b, result);

    const decimals = ctx.query.decimals;

    ctx.info("decimals set on query %s", decimals);

    switch (ctx.query.format) {
      case "number":
        await ctx.text(result);
        break;
      case "text":
        await ctx.text("the result is " + result);
        break;
      default:
        throw new BadRequest("unsupported format");
    }
  }
});

custom types

import {Parser} from "@miqro/parser";

const parser = new Parser();
parser.registerType("CustomType", {
  //...
});
router.get("/add/:a/:b", {
  parser,
  //...
});

static files

import {Static} from "@miqro/core";

router.use(Static({
  directory: resolve(__dirname, "static")
}), "/content/public");

proxy router

import {Proxy} from "@miqro/core";

router.use(Proxy({
  url: "http://otherhost/api/somepath/";
  //rejectUnauthorized: false;
}), "/proxy/");

error handling

router.catch(myFallBackerrorHandler1) // this will catch all throws
router.catch(myFallBackerrorHandler2) // if myFallBackerrorHandler1 didnt ended the request myFallBackerrorHandler2 will be called

router.use(async (ctx) => {
  throw new Error("");
});

apirouter

for loading full directories with the folders acting as path's

consider the following directory structure

api/
  v1/
    user/
      :userId/
        get.ts
        delete.ts
        patch.ts
      post.ts
    post/
      :postId/
        get.ts
      post.ts

this will producte the following routes.

  • GET /api/v1/user/:userId/
  • DELETE /api/v1/user/:userId/
  • PATCH /api/v1/user/:userId/
  • POST /api/v1/user/

  • GET /api/v1/post/

  • POST /api/v1/post/:postId/

each file has to implement the APIRoute interface.

example

import {APIRoute} from "@miqro/core";

export default {
  handler: async (ctx) => {

  }
} as APIRoute;

to load the routes

import {APIRouter} from "@miqro/core";

const api = APIRouter({ dirname: resolve(__dirname, "api") });

app.use(api);

auto documentation

...
console.dir(router.getJSONDoc());
...

or generate a json

npx miqro doc build/api /api

where build/api is the APIRouter directory

5.0.12

9 months ago

5.0.11

10 months ago

5.0.10

1 year ago

5.0.9

1 year ago

5.0.8

2 years ago

5.0.7

2 years ago

5.0.6

2 years ago

5.0.5

2 years ago

5.0.4

2 years ago

5.0.3

2 years ago

5.0.2

2 years ago

4.0.1

2 years ago

3.0.4

2 years ago

3.0.3

2 years ago

3.0.1

2 years ago

3.0.6

2 years ago

3.0.5

2 years ago

3.0.0

2 years ago

2.0.2

2 years ago

2.0.1

2 years ago

1.6.1

3 years ago

1.6.0

3 years ago

1.7.3

3 years ago

1.7.2

3 years ago

1.7.1

3 years ago

1.7.0

3 years ago

1.5.19

3 years ago

1.5.21

3 years ago

1.5.20

3 years ago

1.5.14

3 years ago

1.5.13

3 years ago

1.5.16

3 years ago

1.5.15

3 years ago

1.5.18

3 years ago

1.5.17

3 years ago

1.5.10

3 years ago

1.5.12

3 years ago

1.5.11

3 years ago

1.5.4

3 years ago

1.5.3

3 years ago

1.5.2

3 years ago

1.5.1

3 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.5.9

3 years ago

1.5.8

3 years ago

1.5.7

3 years ago

1.5.6

3 years ago

1.3.9

4 years ago

1.3.8

4 years ago

1.3.11

4 years ago

1.3.6

4 years ago

1.3.5

4 years ago

1.3.4

4 years ago

1.3.3

4 years ago

1.3.2

4 years ago

1.3.1

4 years ago

1.2.5

4 years ago

1.2.4

4 years ago

1.2.3

4 years ago

1.2.2

4 years ago

1.2.0

4 years ago

1.2.1

4 years ago

1.1.19

4 years ago

1.1.20

4 years ago

1.1.18

4 years ago

1.1.17

4 years ago

1.1.9

4 years ago

1.1.8

4 years ago

1.1.12

4 years ago

1.1.11

4 years ago

1.1.10

4 years ago

1.1.16

4 years ago

1.1.15

4 years ago

1.1.14

4 years ago

1.1.13

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago

1.1.4

4 years ago

1.1.3

4 years ago

1.1.1

4 years ago

1.1.0

4 years ago

1.1.2

4 years ago

1.0.23

4 years ago

1.0.22

4 years ago

1.0.21

4 years ago

1.0.20

4 years ago

1.0.19

4 years ago

1.0.18

4 years ago

1.0.17

4 years ago

1.0.16

4 years ago

1.0.15

4 years ago

1.0.14

4 years ago

1.0.13

4 years ago

1.0.12

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.2

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago

0.9.29

4 years ago

0.9.28

4 years ago

0.9.27

4 years ago

0.9.26

4 years ago

0.9.24

4 years ago

0.9.23

4 years ago

0.9.22

4 years ago

0.9.20

4 years ago

0.9.21

4 years ago

0.9.19

4 years ago

0.9.18

4 years ago

0.9.16

4 years ago

0.9.17

4 years ago

0.9.15

4 years ago

0.9.12

5 years ago

0.9.13

5 years ago

0.9.14

5 years ago

0.9.11

5 years ago

0.9.10

5 years ago

0.9.9

5 years ago

0.9.8

5 years ago

0.9.6

5 years ago

0.9.5

5 years ago

0.9.4

5 years ago

0.9.3

5 years ago

0.8.31

5 years ago

0.8.27

5 years ago

0.8.29

5 years ago

0.8.26

5 years ago

0.8.25

5 years ago

0.8.24

5 years ago

0.8.23

5 years ago

0.8.22

5 years ago

0.8.18

5 years ago

0.8.17

5 years ago

0.8.16

5 years ago

0.8.15

5 years ago

0.8.14

5 years ago

0.8.13

5 years ago

0.8.12

5 years ago

0.8.11

5 years ago

0.8.10

5 years ago

0.8.9

5 years ago

0.8.8

5 years ago

0.8.7

5 years ago

0.8.6

5 years ago

0.8.5

5 years ago

0.8.4

5 years ago

0.8.3

5 years ago

0.8.1

5 years ago

0.8.2

5 years ago

0.7.17

5 years ago

0.7.16

5 years ago

0.7.15

5 years ago

0.7.14

5 years ago

0.7.11

5 years ago

0.6.6

5 years ago

0.6.5

5 years ago

0.6.3

5 years ago

0.6.2

5 years ago

0.6.1

5 years ago

0.5.0

5 years ago

0.4.1

5 years ago

0.4.0

5 years ago

0.5.1

5 years ago

0.3.8

5 years ago

0.3.7

5 years ago

0.3.6

5 years ago

0.3.5

5 years ago

0.3.4

5 years ago

0.3.3

5 years ago

0.3.2

5 years ago

0.3.1

5 years ago

0.3.0

5 years ago