diff --git a/spec/helper.js b/spec/helper.js index c281404f06..9c3c7d7cc7 100644 --- a/spec/helper.js +++ b/spec/helper.js @@ -107,6 +107,9 @@ let openConnections = {}; var app = express(); var api = new ParseServer(defaultConfiguration); app.use('/1', api); +app.use('/1', (req, res) => { + fail('should not call next'); +}); var server = app.listen(port); server.on('connection', connection => { let key = `${connection.remoteAddress}:${connection.remotePort}`; @@ -126,7 +129,9 @@ const reconfigureServer = changedConfiguration => { api = new ParseServer(newConfiguration); api.use(require('./testing-routes').router); app.use('/1', api); - + app.use('/1', (req, res) => { + fail('should not call next'); + }); server = app.listen(port); server.on('connection', connection => { let key = `${connection.remoteAddress}:${connection.remotePort}`; diff --git a/src/Controllers/AnalyticsController.js b/src/Controllers/AnalyticsController.js index ea4cb1fee1..934de19418 100644 --- a/src/Controllers/AnalyticsController.js +++ b/src/Controllers/AnalyticsController.js @@ -1,8 +1,6 @@ import AdaptableController from './AdaptableController'; import { AnalyticsAdapter } from '../Adapters/Analytics/AnalyticsAdapter'; -const AppOpenedEventName = 'AppOpened'; - export class AnalyticsController extends AdaptableController { appOpened(req) { return Promise.resolve().then(() => { @@ -15,12 +13,8 @@ export class AnalyticsController extends AdaptableController { } trackEvent(req) { - const eventName = req.params.eventName; - if (eventName === AppOpenedEventName) { - return this.appOpened(req); - } return Promise.resolve().then(() => { - return this.adapter.trackEvent(eventName, req.body, req); + return this.adapter.trackEvent(req.params.eventName, req.body, req); }).then((response) => { return { response: response || {} }; }).catch((err) => { diff --git a/src/ParseServer.js b/src/ParseServer.js index 39ded4a53b..ca87883673 100644 --- a/src/ParseServer.js +++ b/src/ParseServer.js @@ -273,7 +273,9 @@ class ParseServer { api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressRouter()); api.use(bodyParser.json({ 'type': '*/*' , limit: maxUploadSize })); + api.use(middlewares.allowCrossDomain); api.use(middlewares.allowMethodOverride); + api.use(middlewares.handleParseHeaders); let appRouter = ParseServer.promiseRouter({ appId }); api.use(appRouter.expressRouter()); @@ -322,8 +324,6 @@ class ParseServer { }, []); let appRouter = new PromiseRouter(routes, appId); - appRouter.use(middlewares.allowCrossDomain); - appRouter.use(middlewares.handleParseHeaders); batch.mountOnto(appRouter); return appRouter; diff --git a/src/PromiseRouter.js b/src/PromiseRouter.js index f3482b6c1f..b69fd9c2f7 100644 --- a/src/PromiseRouter.js +++ b/src/PromiseRouter.js @@ -39,7 +39,6 @@ export default class PromiseRouter { // location: optional. a location header constructor(routes = [], appId) { this.routes = routes; - this.middlewares = []; this.appId = appId; this.mountRoutes(); } @@ -55,10 +54,6 @@ export default class PromiseRouter { } }; - use(middleware) { - this.middlewares.push(middleware); - } - route(method, path, ...handlers) { switch(method) { case 'POST': @@ -117,8 +112,7 @@ export default class PromiseRouter { this.routes.forEach((route) => { let method = route.method.toLowerCase(); let handler = makeExpressHandler(this.appId, route.handler); - let args = [].concat(route.path, this.middlewares, handler); - expressApp[method].apply(expressApp, args); + expressApp[method].call(expressApp, route.path, handler); }); return expressApp; }; @@ -175,7 +169,7 @@ function makeExpressHandler(appId, promiseHandler) { if (result.text) { res.send(result.text); - return next(); + return; } if (result.location) { @@ -184,7 +178,7 @@ function makeExpressHandler(appId, promiseHandler) { // as it double encodes %encoded chars in URL if (!result.response) { res.send('Found. Redirecting to '+result.location); - return next(); + return; } } if (result.headers) { @@ -193,7 +187,6 @@ function makeExpressHandler(appId, promiseHandler) { }) } res.json(result.response); - next(); }, (e) => { log.error(`Error generating response. ${inspect(e)}`, {error: e}); next(e); diff --git a/src/Routers/AnalyticsRouter.js b/src/Routers/AnalyticsRouter.js index 74011adaf4..511781d807 100644 --- a/src/Routers/AnalyticsRouter.js +++ b/src/Routers/AnalyticsRouter.js @@ -1,6 +1,11 @@ // AnalyticsRouter.js import PromiseRouter from '../PromiseRouter'; +function appOpened(req) { + const analyticsController = req.config.analyticsController; + return analyticsController.appOpened(req); +} + function trackEvent(req) { const analyticsController = req.config.analyticsController; return analyticsController.trackEvent(req); @@ -9,6 +14,7 @@ function trackEvent(req) { export class AnalyticsRouter extends PromiseRouter { mountRoutes() { + this.route('POST','/events/AppOpened', appOpened); this.route('POST','/events/:eventName', trackEvent); } } diff --git a/src/Routers/SessionsRouter.js b/src/Routers/SessionsRouter.js index 0d47f23d6b..0b11a7c379 100644 --- a/src/Routers/SessionsRouter.js +++ b/src/Routers/SessionsRouter.js @@ -13,9 +13,6 @@ export class SessionsRouter extends ClassesRouter { } handleGet(req) { - if (req.params.objectId === 'me') { - return this.handleMe(req); - } req.params.className = '_Session'; return super.handleGet(req); } @@ -86,6 +83,7 @@ export class SessionsRouter extends ClassesRouter { } mountRoutes() { + this.route('GET','/sessions/me', req => { return this.handleMe(req); }); this.route('GET', '/sessions', req => { return this.handleFind(req); }); this.route('GET', '/sessions/:objectId', req => { return this.handleGet(req); }); this.route('POST', '/sessions', req => { return this.handleCreate(req); }); diff --git a/src/Routers/UsersRouter.js b/src/Routers/UsersRouter.js index d32cc30c5f..148b2f4d33 100644 --- a/src/Routers/UsersRouter.js +++ b/src/Routers/UsersRouter.js @@ -19,9 +19,6 @@ export class UsersRouter extends ClassesRouter { } handleGet(req) { - if (req.params.objectId === 'me') { - return this.handleMe(req); - } req.params.className = '_User'; return super.handleGet(req); } @@ -214,6 +211,7 @@ export class UsersRouter extends ClassesRouter { mountRoutes() { this.route('GET', '/users', req => { return this.handleFind(req); }); this.route('POST', '/users', req => { return this.handleCreate(req); }); + this.route('GET', '/users/me', req => { return this.handleMe(req); }); this.route('GET', '/users/:objectId', req => { return this.handleGet(req); }); this.route('PUT', '/users/:objectId', req => { return this.handleUpdate(req); }); this.route('DELETE', '/users/:objectId', req => { return this.handleDelete(req); });