README
Alchemy Router
Alchemy Router is the gateway from HTTP to Alchemy Resources for the Alchemy Micro-services Framework. It can be used directly as an application or as a library to build and customise using express middleware and routes.
Router Application
To install the alchemy router run:
npm install -g alchemy-router
Then execute:
alchemy-router
You can configure the router with the environment variables:
AMQP_URI
default'amqp://localhost'
: the location of the (RabbitMQ) AMQP serverPORT
default8080
: the port to open the HTTP server onTIMEOUT
default5000
: the router will return a408
timeout response after waiting for the service.PATHS
default'{}'
: the JSON string that matches service queues directly with paths, e.g.PATHS='{"/hello" : 'service.hello'}'
will direct all calls that start with path/hello
to the queueservice.hello
.
Docker
This repository also comes with an example Docker container, which is published to the docker hub.
Build the Docker container with:
docker build -t alchemy-router:$VERSION .
Push the docker container with:
docker push alchemy-router:$VERSION
Router Library
To install the router as a library:
npm install alchemy-router
To start a router:
AlchemyRouter = require 'alchemy-router'
router = new AlchemyRouter()
router.start()
Middleware
Middleware can be used to extend the routers with custom functionality. Middleware are objects with a callback
that is an express middleware callback function, an optional start
and stop
functions that can control the life cycle of the middleware.
logging_middleware = {
callback: (req, res, next) ->
console.log req.path
next()
# promise to start middleware
start: -> true
# promise to stop middleware
stop: -> true
}
AlchemyRouter = require 'alchemy-router'
router = new AlchemyRouter()
router.start({
middleware: [logging_middleware]
})
Additional Routes
Additional hard-coded routes can be added to the router, these can be useful for health-checks, logging, versioning ... Note: these routes will override any service routes.
hello_route = (app) ->
app.get '/hello', (req, res) =>
res.send {say: "hello"}
res.end()
AlchemyRouter = require 'alchemy-router'
router = new AlchemyRouter()
router.start({
additional_routes: [hello_route]
})
Documentation
This Alchemy-Router documentation is generated with docco from its annotated source code.
The Alchemy-Router package exports Router:
module.exports = require("./router")