UNPKG

express-gateway

Version:

A microservices API gateway built on top of ExpressJS

63 lines (54 loc) 2.32 kB
const logger = require('../logger').admin; const eventBus = require('../eventBus'); const express = require('express'); module.exports = function ({ plugins, config } = {}) { const cfg = (config || require('../config')).gatewayConfig; if (!cfg.admin || cfg.admin.port === undefined || cfg.admin.port === null) { logger.verbose('Admin server is not configured, launch canceled'); return; } if (cfg.admin.hostname) { logger.warn('Warning! use of hostname is deprecated in admin section, use host instead'); } // Remove the default in the code when we will not support both properties anymore. cfg.admin.host = cfg.admin.hostname || cfg.admin.host || 'localhost'; const app = express(); app.set('x-powered-by', false); app.use(express.json()); if (process.env.LOG_LEVEL === 'debug') { app.use((req, res, next) => { logger.debug(`${req.url} ${req.method}`); req.body && logger.debug(JSON.stringify(req.body, undefined, 2)); next(); }); } if (plugins && plugins.adminRoutes && plugins.adminRoutes.length) { plugins.adminRoutes.forEach(ext => ext(app)); } app.use('/users', require('./routes/users')()); app.use('/apps', require('./routes/apps')()); app.use('/scopes', require('./routes/scopes')()); app.use('/credentials', require('./routes/credentials')()); app.use('/tokens', require('./routes/tokens')()); app.use('/api-endpoints', require('./routes/api-endpoints')({ config })); app.use('/service-endpoints', require('./routes/service-endpoints')({ config })); app.use('/pipelines', require('./routes/pipelines')({ config })); app.use('/policies', require('./routes/policies')({ config })); app.use('/schemas', require('./routes/schemas')()); app.use((err, req, res, next) => { logger.debug(err.stack); if (err.code === 'INVALID_CONFIG') { return res.status(422).send(err.message); } res.status(500).send(err.message || 'admin API error'); }); return new Promise(resolve => { const { port, host, backlog } = cfg.admin; const srv = app.listen(port, host, backlog, () => { const { address, port } = srv.address(); logger.info(`admin http server listening on ${address}:${port}`); eventBus.emit('admin-ready', { adminServer: srv }); resolve(srv); }); }); };