JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 8
  • Score
    100M100P100Q56539F
  • License MIT

koa-scheme is a parameter validation middleware for koa.

Package Exports

  • koa-scheme

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (koa-scheme) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

koa-scheme

koa-scheme is a parameter validation middleware for koa. It's very easy for using, checkout ~

Install

npm i koa-scheme --save

Usage

scheme.json

{
  "/user/:user": {
    "request": {
      "method": "(POST|PATCH)",
      "header": {
        "X-GG-User": "[a-zA-Z]+",
        "X-MM-User": "[a-zA-Z]+"
      },
      "query": {
        "vip": true
      },
      "body": {
        "name": "[a-zA-Z]+",
        "age": "[0-9]{1,2}",
        "family": {
          "sister": {
            "name": ".+",
            "age": "[0-9]{1,2}"
          },
          "mother": {...},
          "father": {...}
        }
      },
      ...
    },
    "response": {
      "body": {
        "name": "[a-zA-Z]+",
        "age": "[0-9]{1,2}",
        "family": {
          "sister": {
            "name": ".+",
            "age": "[0-9]{1,2}"
          }
        }
      }
    }
  },
  "/file/:user": {
    "request": {...},
    "response": {...}
  },
  ...
}

or a better way:

scheme.js

module.exports = {
  "/": {
    "request": {
      "method": "POST",
      "body": {
        "nameArr": testRequestNameArr
      }
    }
  }
}

function testRequestNameArr(arr) {
  if (arr.length === 3 && arr[1] === 'nswbmw') {
    return true;
  } else {
    return false;
  }
}

or:

module.exports = {
  "GET /user/:name": {
    "request": {
      ...
    },
    "response": {
      "body": {
        "name": "[_0-9a-zA-Z]{6, 20}"
      }
    }
  },
  "POST /user": {
    "request": {
      "body": {
        "name": "[_0-9a-zA-Z]{6, 20}"
      }
    }
  }
}

app.js

var koa = require('koa');
var bodyParser = require('koa-bodyparser');
var scheme = require('koa-scheme');
var conf = require('./scheme');
//var route = require('./route/');

var app = koa();
app.use(bodyParser());
app.use(function* (next) {
  try {
    yield next;
  } catch (e) {
    console.log(e.message)
  }
});
app.use(scheme(conf));

app.use(function* () {
  this.body = {
    name: "nswbmw",
    age: 23,
    family: {
      sister: {
        age: 28
      }
    }
  }
});

//route(app);
app.listen(3000, function() {
  console.log("listening on 3000")
});

NB: when use koa-bodyparser before koa-scheme, you could configure 'body' field in 'request'.

Screenshot

curl -i -X POST \
    -H "Content-Type: application/json" \
    -H 'X-GG-User: gg' \
    -H 'X-MM-User: mm' \
    -d '{"name": "nswbmw", "age": 23, "family": {"sister": {"name": "sister", "age": 28}}}' \
    'http://localhost:3000/user/nswbmw?vip=true'
    
curl -i -X PATCH \
    -H "Content-Type: application/json" \
    -H 'X-GG-User: gg' \
    -H 'X-MM-User: mm' \
    -d '{"name": "nswbmw", "age": 23, "family": {"sister": {"name": "sister", "age": 28}}}' \
    'http://localhost:3000/user/nswbmw?vip=true'

curl -i -X POST \
    -H "Content-Type: application/json" \
    -H 'X-GG-User: gg' \
    -H 'X-MM-User: mm' \
    -d '{"name": "nswbmw", "age": 23, "family": {"sister": {"name": "sister", "age": 28}}}' \
    'http://localhost:3000/user/nswbmw?vip=false'

curl -i -X POST \
    -H "Content-Type: application/json" \
    -H 'X-GG-User: gg' \
    -H 'X-MM-User: mm' \
    -d '{"name": "nswbmw", "age": 23, "family": {"sister": {"name": "sister", "age": 28}}}' \
    'http://localhost:3000/user/nswbmw'

curl -i -X PATCH \
    -H "Content-Type: application/json" \
    -H 'X-GG-User: gg' \
    -H 'X-MM-User: mm' \
    -d '{"name": 23, "age": "nswbmw", "family": {"sister": {"name": "sister", "age": 28}}}' \
    'http://localhost:3000/user/nswbmw?vip=true'

License

MIT