Integrating third-party Node.js web frameworks with Hydra, the simplest way.
Hydra is a NodeJS package, which facilitates building distributed applications such as Microservices. (https://www.hydramicroservice.com/)
The magic thing with Hydra is that with a minimum setup, your micro-service get 'superpowers':
By using this module, you will be able to easily integrate your prefered web framework with hydra. Just keep reading...
At the moment, the following frameworks are supported:
Next we will explain you how to create and express based micro-service on top of hydra:
IMPORTANT: Hydra depends on Redis database server for storage, cache and messaging. In case you don't have it yet: https://www.hydramicroservice.com/docs/quick-start/step1.html
Install dependencies:
npm i hydra hydra-integration express --save
Express is a dependency here because in the next example we use express, it could be koa or hapi, or any of the supported frameworks.
Create and edit app.js file:
const HydraServiceFactory = require('hydra-integration').HydraServiceFactory;
const express = require('express');
const router = express.Router();
const factory = new HydraServiceFactory({ hydra: { 'serviceName': 'express-service-test', 'serviceDescription': 'Basic express service on top of Hydra', 'serviceIP': '127.0.0.1', 'servicePort': 3000, 'serviceType': 'express', 'serviceVersion': '1.0.0', 'redis': { 'host': '127.0.0.1', 'port': 6379, 'db': 15 } } });
factory.init().then(factory => factory.getService(service => { router.get('/welcome', (req, res) => res.send('Hello World!')); service.use('/v1', router); }));
Alternative way of getting the service instance by passing config params to the builder (if supported):
```js
factory.init().then(factory => factory.getService({
// optional config params here to be passed to the building strategy
bootstrap: service => {
router.get('/welcome', (req, res) => res.send('Hello World!'));
service.use('/v1', router);
}
}));
To use hydra-integration as a plugin see: The HydraIntegrationPlugin class
node app.js
pm2 start app.js -i 4
hydra-cli routes express-service-test
{
"serviceName": [
"[GET]/_health",
"[GET]/v1/welcome"
]
}
hydra-cli rest express-service-test:[GET]/v1/welcome
{
"headers": {
"x-powered-by": "Express",
"content-type": "text/html; charset=utf-8",
"content-length": "12",
"etag": "W/\"c-Lve95gjOVATpfV8EL5X4nxwjKHE\"",
"date": "Wed, 05 Apr 2017 21:22:51 GMT",
"connection": "close"
},
"body": "Hello World!",
"statusCode": 200
}
Demos available into demos folder on the git repository: https://github.com/jkyberneees/hydra-integration