0.0.1 • Published 5 years ago

koa-mid-end v0.0.1

Weekly downloads
2
License
ISC
Repository
github
Last release
5 years ago

koa-mid-end

NPM version Node.js Version

Mid end middleware for koa

Installation

Install using npm:

npm install koa-mid-end

API Reference

MidEnd

Kind: Exported class

new MidEnd(opts)

Create a new midEnd.

ParamTypeDescription
optsObject
opts.layerObjectprefix router paths

Example Basic usage:

var Koa = require('koa');
var MidEnd = require('koa-mid-end');

var app = new Koa();
var midEnd = new MidEnd();

midEnd
    .setLayers(/***/)
    .sethooks(/***/);

app.use(midEnd.getMiddleware());

midEnd.setLayers(option)

Match URL patterns to request-forward actions using midEnd.setLayers()

ParamTypeDescription
optionObjectlayers mapped by http methods

Example Basic usage:

forward the request get /v2/sourcesA/**/sourcesB/**

to get /v1/sourcesA/**/sourcesB/**

midEnd.setLayers(path.join(__dirname, "./yaml/backend-apis.yaml"))
# backend-apis.yaml
get:
  - originUrl: /v2/sourcesA/:param1/sourcesB/:param2
    host: http://www.***.com
    url: /v1/sourcesA/${param1}/sourcesB/${param2}
    method: get
    desprition: v1 upgraded to v2

or

# backend-apis.yaml
get:
  - originUrl: /v2/sourcesA/(.*)/sourcesB/(.*)
    host: http://www.***.com
    url: /v1/sourcesA/${0}/sourcesB/${1}
    method: get
    desprition: v1 upgraded to v2

or

# backend-apis.yaml
get:
  - originUrl: /v2/(.*)
    host: http://www.***.com
    url: /v1/${0}
    method: get
    desprition: v1 upgraded to v2

midEnd.resetLayers(option)

remove all layers & setLayers

midEnd.setHooks(option)

ParamTypeDescription
optionObjectlayers mapped hookID

Example Basic usage:

check the headers before forwarding request & change response after.

midEnd
    .setLayers(path.join(__dirname, "./yaml/backend-apis.yaml"))
    .setHooks(path.join(__dirname, "./hooks"))
# backend-apis.yaml
get:
  - originUrl: /app/(.*)
    host: http://www.***.com
    url: /web/${0}
    method: get
    desprition: forward the app reqeust to web service & checkHeaders & change response
    hooks:
        before: checkHeaders # this value can be an array like [checkHeaders,...] or - checkHeaders
        after: changeResponse # same as before
// hooks/checkHeaders.js
module.exports = async (ctx, next) => {
    var headers = ctx.headers;
    // check headers.
    next();
};
// hooks/changeResponse.js
module.exports = async (ctx, next) => {
    var body = ctx.body;
    // change body.
    ctx.body = body;
    next();
};

midEnd.resetHooks(option)

remove all hooks & setHooks

midEnd.getMiddleware()

Return the middleware which forwards matched request.

midEnd.getHandler(method, name, options)

With koa-router. Example Basic usage:

# backend-apis.yaml
get:
  - originUrl: /v2/sourcesA/(.*)/sourcesB/(.*)
    host: http://www.***.com
    url: /v1/sourcesA/${0}/sourcesB/${1}
    method: get
    name: getSourcesB
    desprition: v1 upgraded to v2
post:
  - originUrl: /v2/sourcesA/(.*)/sourcesB
    host: http://www.***.com
    url: /v1/sourcesA/${0}/sourcesB/${1}
    method: get
    name: getSourcesB
    desprition: v1 upgraded to v2
var Koa = require('koa');
var Router = require('koa-router');
var MidEnd = require('koa-mid-end');

var app = new Koa();
var router = new Router();
var midEnd = new MidEnd();

midEnd
    .setLayers(/***/)
    .sethooks(/***/);

router.get('/mid-end/sourcesA/(.*)/sourcesB/(.*)',
  midEnd.getHandler('get', 'getSourcesB'),
  (ctx, next) => {
    let responseFromBackend = ctx.responseFromBackends['get-getSourcesB'];
    // ...
  }
);

app
  .use(router.routes())
  .use(router.allowedMethods());

Tests

...