Skip to content

Instantly share code, notes, and snippets.

@siteslave
Forked from kevinswiber/backends.js
Created June 10, 2019 14:48
Show Gist options
  • Save siteslave/4375eb16af366b43b35671a2c5895811 to your computer and use it in GitHub Desktop.
Save siteslave/4375eb16af366b43b35671a2c5895811 to your computer and use it in GitHub Desktop.
Express Gateway Example with Multiple Services
const express = require('express');
const forum = express();
forum
.get('/healthz', (req, res, next) => {
res.send({ name: 'forum', status: 'healthy' });
next();
})
.get('/d/:id', (req, res, next) => {
res.send({ discussion: req.params.id });
next();
})
.listen(process.env.PORT || 1337);
const members = express();
members
.get('/', (req, res, next) => {
res.send({ members: [ { name: 'gary', avatar: 'snail' }] });
next();
})
.listen(process.env.PORT2 || 1338);
http:
port: 8080
admin:
port: 9876
hostname: localhost
apiEndpoints:
forumAPI:
host: 'forum.example.com'
paths:
- '/discussions/*'
- '/healthz'
membersAPI:
host: 'members.example.com'
serviceEndpoints:
forumService:
url: 'http://localhost:1337'
membersService:
url: 'http://localhost:1338'
policies:
- expression
- key-auth
- proxy
pipelines:
- name: forum
apiEndpoints:
- forumAPI
policies:
- expression:
- action:
jscode: |
if (req.url.startsWith('/discussions')) {
const slug = req.url.substr('/discussions'.length);
req.url = '/d' + slug;
}
- proxy:
- action:
serviceEndpoint: forumService
- name: members
apiEndpoints:
- membersAPI
policies:
- key-auth:
- proxy:
- action:
serviceEndpoint: membersService
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment