Create API router to handle common stuff among child routers
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
const { Router: router } = require('express');
|
||||
|
||||
const RedisPool = require('redis-mpool');
|
||||
const cartodbRedis = require('cartodb-redis');
|
||||
|
||||
@@ -38,10 +40,21 @@ const ResourceLocator = require('../models/resource-locator');
|
||||
const LayergroupMetadata = require('../utils/layergroup-metadata');
|
||||
const RendererStatsReporter = require('../stats/reporter/renderer');
|
||||
|
||||
const logger = require('../middleware/logger');
|
||||
const bodyParser = require('body-parser');
|
||||
const servedByHostHeader = require('../middleware/served-by-host-header');
|
||||
const stats = require('../middleware/stats');
|
||||
const lzmaMiddleware = require('../middleware/lzma');
|
||||
const cors = require('../middleware/cors');
|
||||
const user = require('../middleware/user');
|
||||
const sendResponse = require('../middleware/send-response');
|
||||
const syntaxError = require('../middleware/syntax-error');
|
||||
const errorMiddleware = require('../middleware/error-middleware');
|
||||
|
||||
const MapRouter = require('./map-router');
|
||||
const TemplateRouter = require('./template-router');
|
||||
|
||||
module.exports = class ControllersFactory {
|
||||
module.exports = class ApiRouter {
|
||||
constructor ({ serverOptions, environmentOptions }) {
|
||||
this.serverOptions = serverOptions;
|
||||
|
||||
@@ -163,8 +176,8 @@ module.exports = class ControllersFactory {
|
||||
tablesExtentApi
|
||||
};
|
||||
|
||||
this.mapRouter = new MapRouter({ collaborators, serverOptions });
|
||||
this.templateRouter = new TemplateRouter({ collaborators, serverOptions });
|
||||
this.mapRouter = new MapRouter({ collaborators });
|
||||
this.templateRouter = new TemplateRouter({ collaborators });
|
||||
}
|
||||
|
||||
register (app) {
|
||||
@@ -173,8 +186,34 @@ module.exports = class ControllersFactory {
|
||||
app.layergroupAffectedTablesCache = this.layergroupAffectedTablesCache;
|
||||
}
|
||||
|
||||
this.templateRouter.register(app);
|
||||
this.mapRouter.register(app);
|
||||
const apiRouter = router();
|
||||
|
||||
apiRouter.use(logger(this.serverOptions));
|
||||
apiRouter.use(bodyParser.json());
|
||||
apiRouter.use(servedByHostHeader());
|
||||
apiRouter.use(stats({
|
||||
enabled: this.serverOptions.useProfiler,
|
||||
statsClient: global.statsClient
|
||||
}));
|
||||
apiRouter.use(lzmaMiddleware());
|
||||
apiRouter.use(cors());
|
||||
apiRouter.use(user());
|
||||
|
||||
this.templateRouter.register(apiRouter);
|
||||
this.mapRouter.register(apiRouter);
|
||||
|
||||
apiRouter.use(sendResponse());
|
||||
apiRouter.use(syntaxError());
|
||||
apiRouter.use(errorMiddleware());
|
||||
|
||||
const paths = [
|
||||
'/api/v1',
|
||||
'/user/:user/api/v1',
|
||||
'/tiles',
|
||||
'/database/:dbname'
|
||||
];
|
||||
|
||||
app.use(`(?:${paths.join('|')})`, apiRouter);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,16 +1,5 @@
|
||||
const { Router: router } = require('express');
|
||||
|
||||
const logger = require('../middleware/logger');
|
||||
const bodyParser = require('body-parser');
|
||||
const servedByHostHeader = require('../middleware/served-by-host-header');
|
||||
const stats = require('../middleware/stats');
|
||||
const lzmaMiddleware = require('../middleware/lzma');
|
||||
const cors = require('../middleware/cors');
|
||||
const user = require('../middleware/user');
|
||||
const sendResponse = require('../middleware/send-response');
|
||||
const syntaxError = require('../middleware/syntax-error');
|
||||
const errorMiddleware = require('../middleware/error-middleware');
|
||||
|
||||
const AnalysisLayergroupController = require('./layergroup/analysis');
|
||||
const AttributesLayergroupController = require('./layergroup/attributes');
|
||||
const DataviewLayergroupController = require('./layergroup/dataview');
|
||||
@@ -21,9 +10,7 @@ const PreviewTemplateController = require('./template/preview');
|
||||
const AnalysesController = require('./analyses');
|
||||
|
||||
module.exports = class MapRouter {
|
||||
constructor ({ collaborators, serverOptions }) {
|
||||
this.serverOptions = serverOptions;
|
||||
|
||||
constructor ({ collaborators }) {
|
||||
const {
|
||||
analysisStatusBackend,
|
||||
attributesBackend,
|
||||
@@ -128,22 +115,9 @@ module.exports = class MapRouter {
|
||||
);
|
||||
}
|
||||
|
||||
register (app) {
|
||||
const mapConfigBasePath = this.serverOptions.base_url_mapconfig;
|
||||
|
||||
register (apiRouter) {
|
||||
const mapRouter = router();
|
||||
|
||||
mapRouter.use(logger(this.serverOptions));
|
||||
mapRouter.use(bodyParser.json());
|
||||
mapRouter.use(servedByHostHeader());
|
||||
mapRouter.use(stats({
|
||||
enabled: this.serverOptions.useProfiler,
|
||||
statsClient: global.statsClient
|
||||
}));
|
||||
mapRouter.use(lzmaMiddleware());
|
||||
mapRouter.use(cors());
|
||||
mapRouter.use(user());
|
||||
|
||||
this.analysisLayergroupController.register(mapRouter);
|
||||
this.attributesLayergroupController.register(mapRouter);
|
||||
this.dataviewLayergroupController.register(mapRouter);
|
||||
@@ -153,10 +127,11 @@ module.exports = class MapRouter {
|
||||
this.previewTemplateController.register(mapRouter);
|
||||
this.analysesController.register(mapRouter);
|
||||
|
||||
mapRouter.use(sendResponse());
|
||||
mapRouter.use(syntaxError());
|
||||
mapRouter.use(errorMiddleware());
|
||||
const paths = [
|
||||
'/map',
|
||||
'/layergroup'
|
||||
];
|
||||
|
||||
app.use(mapConfigBasePath, mapRouter);
|
||||
apiRouter.use(`(?:${paths.join('|')})`, mapRouter);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,24 +1,11 @@
|
||||
const { Router: router } = require('express');
|
||||
|
||||
const logger = require('../middleware/logger');
|
||||
const bodyParser = require('body-parser');
|
||||
const servedByHostHeader = require('../middleware/served-by-host-header');
|
||||
const stats = require('../middleware/stats');
|
||||
const lzmaMiddleware = require('../middleware/lzma');
|
||||
const cors = require('../middleware/cors');
|
||||
const user = require('../middleware/user');
|
||||
const sendResponse = require('../middleware/send-response');
|
||||
const syntaxError = require('../middleware/syntax-error');
|
||||
const errorMiddleware = require('../middleware/error-middleware');
|
||||
|
||||
const NamedMapController = require('./map/named');
|
||||
const AdminTemplateController = require('./template/admin');
|
||||
const TileTemplateController = require('./template/tile');
|
||||
|
||||
module.exports = class TemplateRouter {
|
||||
constructor ({ collaborators, serverOptions }) {
|
||||
this.serverOptions = serverOptions;
|
||||
|
||||
constructor ({ collaborators }) {
|
||||
const {
|
||||
pgConnection,
|
||||
templateMaps,
|
||||
@@ -65,30 +52,18 @@ module.exports = class TemplateRouter {
|
||||
);
|
||||
}
|
||||
|
||||
register (app) {
|
||||
const templateBasePath = this.serverOptions.base_url_templated;
|
||||
|
||||
register (apiRouter) {
|
||||
const templateRouter = router();
|
||||
|
||||
templateRouter.use(logger(this.serverOptions));
|
||||
templateRouter.use(bodyParser.json());
|
||||
templateRouter.use(servedByHostHeader());
|
||||
templateRouter.use(stats({
|
||||
enabled: this.serverOptions.useProfiler,
|
||||
statsClient: global.statsClient
|
||||
}));
|
||||
templateRouter.use(lzmaMiddleware());
|
||||
templateRouter.use(cors());
|
||||
templateRouter.use(user());
|
||||
|
||||
this.namedMapController.register(templateRouter);
|
||||
this.tileTemplateController.register(templateRouter);
|
||||
this.adminTemplateController.register(templateRouter);
|
||||
|
||||
templateRouter.use(sendResponse());
|
||||
templateRouter.use(syntaxError());
|
||||
templateRouter.use(errorMiddleware());
|
||||
const paths = [
|
||||
'/map/named',
|
||||
'/template'
|
||||
];
|
||||
|
||||
app.use(templateBasePath, templateRouter);
|
||||
apiRouter.use(`(?:${paths.join('|')})`, templateRouter);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -5,7 +5,7 @@ const { mapnik } = windshaft;
|
||||
|
||||
const jsonReplacer = require('./utils/json-replacer');
|
||||
|
||||
const ControllersFactory = require('./controllers/factory');
|
||||
const ApiRouter = require('./controllers/api-router');
|
||||
const ServerInfoController = require('./controllers/server-info');
|
||||
|
||||
const StatsClient = require('./stats/client');
|
||||
@@ -27,8 +27,8 @@ module.exports = function createServer (serverOptions) {
|
||||
app.disable('etag');
|
||||
app.set('json replacer', jsonReplacer());
|
||||
|
||||
const controllers = new ControllersFactory({ serverOptions, environmentOptions: global.environment });
|
||||
controllers.register(app);
|
||||
const apiRouter = new ApiRouter({ serverOptions, environmentOptions: global.environment });
|
||||
apiRouter.register(app);
|
||||
|
||||
const versions = getAndValidateVersions(serverOptions);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user