colucom / osseus-router

MIT License
1 stars 0 forks source link

JavaScript Style Guide

Osseus Router

JSON Routes (for osseus) based osseus module to work with osseus-server

Install

$ npm install @colucom/osseus-router

Usage

Configuration

Mandatory:

Optional:

Example

/routes/examples.json:

{
  "/example": {
    "GET": {
      "policy": "global:firstPolicy",
      "route": "exampleGET"
    },
    "POST": {
      "policy": [
        "global:firstPolicy",
        "global:secondPolicy"
      ],
      "route": "./controllers/AnotherController:examplePOST"
    }
  }
}

Note

By default all routes in /routes/example.json are assumed to be in /controllers/ExamplesController.js but in case you want to use a route from another controller need to specify its location

/policy/global.js:

module.exports = (osseus) => {
  return {
    firstPolicy: (req, res, next) => {
      req.policies = req.policies || []
      req.policies.push('firstPolicy')
      next()
    },
    secondPolicy: (req, res, next) => {
      req.policies = req.policies || []
      req.policies.push('secondPolicy')
      next()
    }
  }
}

/controllers/ExamplesController.js:

module.exports = (osseus) => {
  return {
    examplePOST: (req, res, next) => {
      res.send({called: 'examplePOST', policies: req.policies})
    }
  }
}

/controllers/AnotherController.js:

module.exports = (osseus) => {
  return {
    examplePOST: (req, res, next) => {
      res.send({called: 'examplePOST', policies: req.policies})
    }
  }
}

Running:

$ node index.js --OSSEUS_SERVER_PORT 8080

Will start your application and listen on 8080.

Now, let's send some test requests and see what we get:

$ curl 0:3000/example

will result in:

$ {"called":"exampleGET","policies":["firstPolicy"]}

and:

$ curl -XPOST 0:3000/example

will result in:

$ {"called":"examplePOST","policies":["firstPolicy","secondPolicy"]}

More detailed examples can be found here

Contributing

Please see contributing guidelines.

License

Code released under the MIT License.