From ac12400201af67a14a7857d8270ad0f9246e70e4 Mon Sep 17 00:00:00 2001 From: Rolando Santamaria Maso Date: Thu, 3 Jan 2019 11:14:45 +0100 Subject: [PATCH 1/2] supporting find-my-way router override --- README.md | 19 ++++++++++++++++--- demos/router-factory.js | 13 +++++++++++++ index.js | 4 ++-- specs/router-factory.test.js | 31 +++++++++++++++++++++++++++++++ 4 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 demos/router-factory.js create mode 100644 specs/router-factory.test.js diff --git a/README.md b/README.md index d89502a..9645103 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ const service = require('restana')({ ### Configuration - `server`: Allows to override the HTTP server instance to be used. +- `routerFactory`: Router factory function to allow default `find-my-way` router override. - `prioRequestsProcessing`: If `TRUE`, HTTP requests processing/handling is prioritized using `setImmediate`. Default value: `TRUE` - `ignoreTrailingSlash`: If `TRUE`, trailing slashes on routes are ignored. Default value: `FALSE` - `allowUnsafeRegex`: If `TRUE`, potentially catastrophic exponential-time regular expressions are disabled. Default value: `FALSE` @@ -45,7 +46,19 @@ const service = require('restana')({ }); ``` -### Creating the micro-service interface +#### Providing a router factory method: +> In this example we use `anumargak` router instead of `find-my-way`. +```js +const anumargak = require('anumargak') +const service = require('restana')({ + routerFactory: (options) => { + return anumargak(options) + } +}) +... +``` + +### Creating a micro-service ```js const bodyParser = require('body-parser'); service.use(bodyParser.json()); @@ -86,12 +99,12 @@ Supported HTTP methods: const methods = ['get', 'delete', 'put', 'patch', 'post', 'head', 'options', 'trace']; ``` -### Starting the service +#### Starting the service ```js service.start(3000).then((server) => {}); ``` -### Stopping the service +#### Stopping the service ```js service.close().then(()=> {}); ``` diff --git a/demos/router-factory.js b/demos/router-factory.js new file mode 100644 index 0000000..49696de --- /dev/null +++ b/demos/router-factory.js @@ -0,0 +1,13 @@ +const anumargak = require('anumargak') + +const service = require('./../index')({ + routerFactory: (options) => { + console.log('creating anumargak router...') + return anumargak(options) + } +}) + +service.get('/hi', (req, res) => { + res.send('Hello World!') +}) +service.start() diff --git a/index.js b/index.js index 118f9d9..fa2246d 100644 --- a/index.js +++ b/index.js @@ -49,8 +49,8 @@ module.exports = (options = {}) => { }) } - // creating request router instance - const router = requestRouter(options) + // creating request router instance, considers custom router override + const router = options.routerFactory ? options.routerFactory(options) : requestRouter(options) // routes holder const routes = {} // global middlewares holder diff --git a/specs/router-factory.test.js b/specs/router-factory.test.js new file mode 100644 index 0000000..1a8774c --- /dev/null +++ b/specs/router-factory.test.js @@ -0,0 +1,31 @@ +/* global describe, it */ +const request = require('supertest') + +describe('Router Factory - overriding find-my-way router with "anumargak"', () => { + let server + const anumargak = require('anumargak') + + const service = require('../index')({ + routerFactory: (options) => { + console.log('creating anumargak router...') + return anumargak(options) + } + }) + service.get('/hello', (req, res) => { + res.send(200) + }) + + it('should start the service with "anumargak" router', async () => { + server = await service.start(~~process.env.PORT) + }) + + it('should GET 200 on /hello', async () => { + await request(server) + .get('/hello') + .expect(200) + }) + + it('should successfully terminate the service', async () => { + await service.close() + }) +}) From 6d60554d7792c199e2b28129542e05884f1fba96 Mon Sep 17 00:00:00 2001 From: Rolando Santamaria Maso Date: Thu, 3 Jan 2019 11:15:00 +0100 Subject: [PATCH 2/2] bumping minor version --- package-lock.json | 37 ++++++++++++++++++++++++++++++++++++- package.json | 3 ++- 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6542bde..f21c498 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "restana", - "version": "2.6.0", + "version": "2.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -109,6 +109,17 @@ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, + "anumargak": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/anumargak/-/anumargak-2.0.2.tgz", + "integrity": "sha512-mMvIyk02zxU36Isqw/FKq2u3obcV51ge9SaYQDr/QwtCSbRcuUefZTA0Ox4FWhAFOgvD4PMPh44CbDcrDnUObg==", + "dev": true, + "requires": { + "randexp": "^0.4.9", + "safe-regex": "^1.1.0", + "semver-store": "^0.3.0" + } + }, "any-promise": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", @@ -781,6 +792,12 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "dev": true + }, "dtrace-provider": { "version": "0.8.7", "resolved": "https://registry.npmjs.org/dtrace-provider/-/dtrace-provider-0.8.7.tgz", @@ -3033,6 +3050,24 @@ "fast-safe-stringify": "^1.0.8" } }, + "randexp": { + "version": "0.4.9", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.9.tgz", + "integrity": "sha512-maAX1cnBkzIZ89O4tSQUOF098xjGMC8N+9vuY/WfHwg87THw6odD2Br35donlj5e6KnB1SB0QBHhTQhhDHuTPQ==", + "dev": true, + "requires": { + "drange": "^1.0.0", + "ret": "^0.2.0" + }, + "dependencies": { + "ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "dev": true + } + } + }, "range-parser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", diff --git a/package.json b/package.json index dba91a1..4814e1e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "restana", - "version": "2.6.0", + "version": "2.7.0", "description": "Super fast and minimalist web framework for building REST micro-services.", "main": "index.js", "scripts": { @@ -37,6 +37,7 @@ "find-my-way": "^1.17.0" }, "devDependencies": { + "anumargak": "^2.0.2", "chai": "^4.2.0", "express": "^4.16.4", "fastify": "^1.13.3",