Skip to content

Commit

Permalink
Adds middleswares on PromiseRouter, fixes #2410
Browse files Browse the repository at this point in the history
  • Loading branch information
flovilmart committed Aug 6, 2016
1 parent 8d98157 commit 503790c
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 49 deletions.
12 changes: 6 additions & 6 deletions src/ParseServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -284,21 +284,19 @@ class ParseServer {
var api = express();
//api.use("/apps", express.static(__dirname + "/public"));
// File handling needs to be before default middlewares are applied
api.use('/', middlewares.allowCrossDomain, new FilesRouter().getExpressRouter({
api.use('/', middlewares.allowCrossDomain, new FilesRouter().expressRouter({
maxUploadSize: maxUploadSize
}));

api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressApp());
api.use('/', bodyParser.urlencoded({extended: false}), new PublicAPIRouter().expressRouter());

// TODO: separate this from the regular ParseServer object
if (process.env.TESTING == 1) {
api.use('/', require('./testing-routes').router);
}

api.use(bodyParser.json({ 'type': '*/*' , limit: maxUploadSize }));
api.use(middlewares.allowCrossDomain);
api.use(middlewares.allowMethodOverride);
api.use(middlewares.handleParseHeaders);

let routers = [
new ClassesRouter(),
Expand All @@ -323,10 +321,12 @@ class ParseServer {
}, []);

let appRouter = new PromiseRouter(routes, appId);

appRouter.use(middlewares.allowCrossDomain);
appRouter.use(middlewares.handleParseHeaders);

batch.mountOnto(appRouter);

api.use(appRouter.expressApp());
api.use(appRouter.expressRouter());

api.use(middlewares.handleParseErrors);

Expand Down
53 changes: 14 additions & 39 deletions src/PromiseRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ export default class PromiseRouter {
// location: optional. a location header
constructor(routes = [], appId) {
this.routes = routes;
this.middlewares = [];
this.appId = appId;
this.mountRoutes();
}
Expand All @@ -38,6 +39,10 @@ export default class PromiseRouter {
}
};

use(middleware) {
this.middlewares.push(middleware);
}

route(method, path, ...handlers) {
switch(method) {
case 'POST':
Expand Down Expand Up @@ -107,47 +112,17 @@ export default class PromiseRouter {

// Mount the routes on this router onto an express app (or express router)
mountOnto(expressApp) {
for (var route of this.routes) {
switch(route.method) {
case 'POST':
expressApp.post(route.path, makeExpressHandler(this.appId, route.handler));
break;
case 'GET':
expressApp.get(route.path, makeExpressHandler(this.appId, route.handler));
break;
case 'PUT':
expressApp.put(route.path, makeExpressHandler(this.appId, route.handler));
break;
case 'DELETE':
expressApp.delete(route.path, makeExpressHandler(this.appId, route.handler));
break;
default:
throw 'unexpected code branch';
}
}
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);
});
return expressApp;
};

expressApp() {
var expressApp = express();
for (var route of this.routes) {
switch(route.method) {
case 'POST':
expressApp.post(route.path, makeExpressHandler(this.appId, route.handler));
break;
case 'GET':
expressApp.get(route.path, makeExpressHandler(this.appId, route.handler));
break;
case 'PUT':
expressApp.put(route.path, makeExpressHandler(this.appId, route.handler));
break;
case 'DELETE':
expressApp.delete(route.path, makeExpressHandler(this.appId, route.handler));
break;
default:
throw 'unexpected code branch';
}
}
return expressApp;
expressRouter() {
return this.mountOnto(express.Router());
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/Routers/FilesRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import mime from 'mime';

export class FilesRouter {

getExpressRouter(options = {}) {
expressRouter(options = {}) {
var router = express.Router();
router.get('/files/:appId/:filename', this.getHandler);

Expand Down
6 changes: 3 additions & 3 deletions src/Routers/PublicAPIRouter.js
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,10 @@ export class PublicAPIRouter extends PromiseRouter {
req => { return this.requestResetPassword(req); });
}

expressApp() {
let router = express();
expressRouter() {
let router = express.Router();
router.use("/apps", express.static(public_html));
router.use("/", super.expressApp());
router.use("/", super.expressRouter());
return router;
}
}
Expand Down

0 comments on commit 503790c

Please sign in to comment.