mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-10 23:36:14 -05:00
Refactored apps to have access to a router
refs #9192 - Instead of `setupRoutes` function in apps that gets passed a router, there is now a registerRouter function as part of the proxy - Moved towards a route service, which will know about all routes - Using classes to abstract away shared behaviour Notes: - changing the app proxy didn't result in a test failure! - structure of route service is totally new and may change a lot yet
This commit is contained in:
parent
bcf5a1bc34
commit
9b54ed0689
8 changed files with 48 additions and 19 deletions
|
@ -5,9 +5,7 @@ var router = require('./lib/router'),
|
|||
module.exports = {
|
||||
activate: function activate(ghost) {
|
||||
registerHelpers(ghost);
|
||||
},
|
||||
|
||||
setupRoutes: function setupRoutes(siteRouter) {
|
||||
siteRouter.use('*/' + config.get('routeKeywords').amp + '/', router);
|
||||
ghost.routeService.registerRouter('*/' + config.get('routeKeywords').amp + '/', router);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -26,15 +26,13 @@ module.exports = {
|
|||
}
|
||||
}
|
||||
|
||||
ghost.routeService.registerRouter('/' + config.get('routeKeywords').private + '/', router);
|
||||
|
||||
registerHelpers(ghost);
|
||||
},
|
||||
|
||||
setupMiddleware: function setupMiddleware(siteApp) {
|
||||
siteApp.use(middleware.checkIsPrivate);
|
||||
siteApp.use(middleware.filterPrivateRoutes);
|
||||
},
|
||||
|
||||
setupRoutes: function setupRoutes(siteRouter) {
|
||||
siteRouter.use('/' + config.get('routeKeywords').private + '/', router);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -7,11 +7,10 @@ var router = require('./lib/router'),
|
|||
|
||||
module.exports = {
|
||||
activate: function activate(ghost) {
|
||||
// TODO, how to do all this only if the Subscribers flag is set?!
|
||||
registerHelpers(ghost);
|
||||
},
|
||||
|
||||
setupRoutes: function setupRoutes(siteRouter) {
|
||||
siteRouter.use('/' + config.get('routeKeywords').subscribe + '/', function labsEnabledRouter(req, res, next) {
|
||||
ghost.routeService.registerRouter('/' + config.get('routeKeywords').subscribe + '/', function labsEnabledRouter(req, res, next) {
|
||||
if (labs.isSet('subscribers') === true) {
|
||||
return router.apply(this, arguments);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ var _ = require('lodash'),
|
|||
helpers = require('../../helpers/register'),
|
||||
filters = require('../../filters'),
|
||||
i18n = require('../../i18n'),
|
||||
router = require('../route').appRouter,
|
||||
generateProxyFunctions;
|
||||
|
||||
generateProxyFunctions = function (name, permissions, isInternal) {
|
||||
|
@ -69,6 +70,12 @@ generateProxyFunctions = function (name, permissions, isInternal) {
|
|||
register: checkRegisterPermissions('helpers', helpers.registerThemeHelper.bind(helpers)),
|
||||
registerAsync: checkRegisterPermissions('helpers', helpers.registerAsyncThemeHelper.bind(helpers))
|
||||
},
|
||||
// Expose the route service...
|
||||
routeService: {
|
||||
// This allows for mounting an entirely new Router at a path...
|
||||
registerRouter: checkRegisterPermissions('routes', router.registerRouter.bind(router))
|
||||
},
|
||||
// Mini proxy to the API - needs review
|
||||
api: {
|
||||
posts: passThruAppContextToApi('posts',
|
||||
_.pick(api.posts, 'browse', 'read', 'edit', 'add', 'destroy')
|
||||
|
|
15
core/server/services/route/AppRouter.js
Normal file
15
core/server/services/route/AppRouter.js
Normal file
|
@ -0,0 +1,15 @@
|
|||
/**
|
||||
* An instance of router that is provided to Apps, to mount routes into.
|
||||
*/
|
||||
|
||||
var debug = require('ghost-ignition').debug('services:routes:app'),
|
||||
Router = require('./base/Router');
|
||||
|
||||
class AppRouter extends Router {
|
||||
registerRouter(path, router) {
|
||||
debug('registerRouter for', path);
|
||||
this.router.use(path, router);
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = AppRouter;
|
9
core/server/services/route/base/Router.js
Normal file
9
core/server/services/route/base/Router.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
var expressRouter = require('express').Router;
|
||||
|
||||
class Router {
|
||||
constructor() {
|
||||
this.router = expressRouter({mergeParams: true});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Router;
|
9
core/server/services/route/index.js
Normal file
9
core/server/services/route/index.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
/**
|
||||
* # Route Service
|
||||
*
|
||||
* Everything in here is 100% experimental
|
||||
*/
|
||||
|
||||
var AppRouter = require('./AppRouter');
|
||||
|
||||
module.exports.appRouter = new AppRouter();
|
|
@ -1,8 +1,8 @@
|
|||
var express = require('express'),
|
||||
path = require('path'),
|
||||
config = require('../config'),
|
||||
controllers = require('../controllers'),
|
||||
channels = require('../controllers/channels'),
|
||||
apps = require('../services/route').appRouter,
|
||||
utils = require('../utils');
|
||||
|
||||
module.exports = function siteRouter() {
|
||||
|
@ -21,14 +21,8 @@ module.exports = function siteRouter() {
|
|||
// Channels
|
||||
router.use(channels.router());
|
||||
|
||||
// setup routes for internal apps
|
||||
// @TODO: refactor this to be a proper app route hook for internal & external apps
|
||||
config.get('apps:internal').forEach(function (appName) {
|
||||
var app = require(path.join(config.get('paths').internalAppPath, appName));
|
||||
if (app.hasOwnProperty('setupRoutes')) {
|
||||
app.setupRoutes(router);
|
||||
}
|
||||
});
|
||||
// setup routes for apps
|
||||
router.use(apps.router);
|
||||
|
||||
// Default
|
||||
router.get('*', controllers.single);
|
||||
|
|
Loading…
Add table
Reference in a new issue