Skip to content

Commit 490e452

Browse files
authored
v2.0.0 (#22)
* v2.0.0 * supporting restana 4.x
1 parent b65b602 commit 490e452

File tree

4 files changed

+111
-82
lines changed

4 files changed

+111
-82
lines changed

index.js

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ const restana = require('restana')
55
const pump = require('pump')
66
const toArray = require('stream-to-array')
77
const defaultProxyHandler = (req, res, url, proxy, proxyOpts) => proxy(req, res, url, proxyOpts)
8-
const DEFAULT_METHODS = require('restana/libs/methods')
8+
const DEFAULT_METHODS = require('restana/libs/methods').filter(method => method !== 'all')
99
const send = require('@polka/send-type')
1010

1111
const gateway = (opts) => {
@@ -14,9 +14,7 @@ const gateway = (opts) => {
1414
pathRegex: '/*'
1515
}, opts)
1616

17-
const server = opts.server || ((opts.restana instanceof Function) ? opts.restana() : restana(opts.restana || {
18-
disableResponseEvent: true
19-
}))
17+
const server = opts.server || restana(opts.restana)
2018

2119
// registering global middlewares
2220
opts.middlewares.forEach(middleware => {
@@ -64,36 +62,42 @@ const gateway = (opts) => {
6462

6563
// registering route handlers
6664
const methods = route.methods || DEFAULT_METHODS
65+
66+
const args = [
67+
// path
68+
route.prefix + route.pathRegex,
69+
// route middlewares
70+
...route.middlewares,
71+
// route handler
72+
handler(route, proxy, proxyHandler)
73+
]
74+
6775
methods.forEach(method => {
6876
method = method.toLowerCase()
69-
7077
if (server[method]) {
71-
server[method].apply(server, [
72-
// path
73-
route.prefix + route.pathRegex,
74-
// route middlewares
75-
...route.middlewares,
76-
// route handler
77-
handler(route, proxy, proxyHandler)
78-
])
78+
server[method].apply(server, args)
7979
}
8080
})
8181
})
8282

8383
return server
8484
}
8585

86-
const handler = (route, proxy, proxyHandler) => async (req, res) => {
87-
req.url = req.url.replace(route.prefix, route.prefixRewrite)
88-
const shouldAbortProxy = await route.hooks.onRequest(req, res)
89-
if (!shouldAbortProxy) {
90-
const proxyOpts = Object.assign({
91-
request: {
92-
timeout: req.timeout || route.timeout
93-
}
94-
}, route.hooks)
95-
96-
proxyHandler(req, res, req.url, proxy, proxyOpts)
86+
const handler = (route, proxy, proxyHandler) => async (req, res, next) => {
87+
try {
88+
req.url = req.url.replace(route.prefix, route.prefixRewrite)
89+
const shouldAbortProxy = await route.hooks.onRequest(req, res)
90+
if (!shouldAbortProxy) {
91+
const proxyOpts = Object.assign({
92+
request: {
93+
timeout: req.timeout || route.timeout
94+
}
95+
}, route.hooks)
96+
97+
proxyHandler(req, res, req.url, proxy, proxyOpts)
98+
}
99+
} catch (err) {
100+
return next(err)
97101
}
98102
}
99103

package-lock.json

Lines changed: 62 additions & 37 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fast-gateway",
3-
"version": "1.5.2",
3+
"version": "2.0.0",
44
"description": "A Node.js API Gateway for the masses!",
55
"main": "index.js",
66
"scripts": {
@@ -29,19 +29,19 @@
2929
"@polka/send-type": "^0.5.2",
3030
"fast-proxy": "^1.3.0",
3131
"http-cache-middleware": "^1.2.3",
32-
"restana": "^3.4.1",
32+
"restana": "^4.0.3",
3333
"stream-to-array": "^2.3.0"
3434
},
3535
"devDependencies": {
36-
"express": "^4.17.1",
3736
"chai": "^4.2.0",
3837
"cors": "^2.8.5",
38+
"express": "^4.17.1",
3939
"express-jwt": "^5.3.1",
4040
"express-rate-limit": "^5.0.0",
4141
"helmet": "^3.21.2",
4242
"mocha": "^6.2.2",
4343
"nyc": "^14.1.1",
44-
"opossum": "^4.2.1",
44+
"opossum": "^4.2.2",
4545
"request-ip": "^2.1.3",
4646
"response-time": "^2.3.2",
4747
"standard": "^14.3.1",

test/config.js

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,16 @@ module.exports = async () => {
2424
onResponse (req, res, stream) { pump(stream, res) }
2525
}
2626
}, {
27-
prefix: '/users',
27+
prefix: '/users/response-time',
28+
prefixRewrite: '',
2829
target: 'http://localhost:3000',
29-
docs: {
30-
name: 'Users Service',
31-
endpoint: 'swagger.json',
32-
type: 'swagger'
30+
middlewares: [require('response-time')()],
31+
hooks: {
32+
rewriteHeaders (headers) {
33+
headers['post-processed'] = true
34+
35+
return headers
36+
}
3337
}
3438
}, {
3539
prefix: '/users/proxy-aborted',
@@ -43,18 +47,6 @@ module.exports = async () => {
4347
return true
4448
}
4549
}
46-
}, {
47-
prefix: '/users/response-time',
48-
prefixRewrite: '',
49-
target: 'http://localhost:3000',
50-
middlewares: [require('response-time')()],
51-
hooks: {
52-
rewriteHeaders (headers) {
53-
headers['post-processed'] = true
54-
55-
return headers
56-
}
57-
}
5850
}, {
5951
prefix: '/users/on-request-error',
6052
target: 'http://localhost:3000',
@@ -63,6 +55,14 @@ module.exports = async () => {
6355
throw new Error('ups, pre-processing error...')
6456
}
6557
}
58+
}, {
59+
prefix: '/users',
60+
target: 'http://localhost:3000',
61+
docs: {
62+
name: 'Users Service',
63+
endpoint: 'swagger.json',
64+
type: 'swagger'
65+
}
6666
},
6767
{
6868
pathRegex: '',

0 commit comments

Comments
 (0)