Skip to content

Commit 503790c

Browse files
committed
Adds middleswares on PromiseRouter, fixes #2410
1 parent 8d98157 commit 503790c

File tree

4 files changed

+24
-49
lines changed

4 files changed

+24
-49
lines changed

src/ParseServer.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -284,21 +284,19 @@ class ParseServer {
284284
var api = express();
285285
//api.use("/apps", express.static(__dirname + "/public"));
286286
// File handling needs to be before default middlewares are applied
287-
api.use('/', middlewares.allowCrossDomain, new FilesRouter().getExpressRouter({
287+
api.use('/', middlewares.allowCrossDomain, new FilesRouter().expressRouter({
288288
maxUploadSize: maxUploadSize
289289
}));
290290

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

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

298298
api.use(bodyParser.json({ 'type': '*/*' , limit: maxUploadSize }));
299-
api.use(middlewares.allowCrossDomain);
300299
api.use(middlewares.allowMethodOverride);
301-
api.use(middlewares.handleParseHeaders);
302300

303301
let routers = [
304302
new ClassesRouter(),
@@ -323,10 +321,12 @@ class ParseServer {
323321
}, []);
324322

325323
let appRouter = new PromiseRouter(routes, appId);
326-
324+
appRouter.use(middlewares.allowCrossDomain);
325+
appRouter.use(middlewares.handleParseHeaders);
326+
327327
batch.mountOnto(appRouter);
328328

329-
api.use(appRouter.expressApp());
329+
api.use(appRouter.expressRouter());
330330

331331
api.use(middlewares.handleParseErrors);
332332

src/PromiseRouter.js

Lines changed: 14 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ export default class PromiseRouter {
2323
// location: optional. a location header
2424
constructor(routes = [], appId) {
2525
this.routes = routes;
26+
this.middlewares = [];
2627
this.appId = appId;
2728
this.mountRoutes();
2829
}
@@ -38,6 +39,10 @@ export default class PromiseRouter {
3839
}
3940
};
4041

42+
use(middleware) {
43+
this.middlewares.push(middleware);
44+
}
45+
4146
route(method, path, ...handlers) {
4247
switch(method) {
4348
case 'POST':
@@ -107,47 +112,17 @@ export default class PromiseRouter {
107112

108113
// Mount the routes on this router onto an express app (or express router)
109114
mountOnto(expressApp) {
110-
for (var route of this.routes) {
111-
switch(route.method) {
112-
case 'POST':
113-
expressApp.post(route.path, makeExpressHandler(this.appId, route.handler));
114-
break;
115-
case 'GET':
116-
expressApp.get(route.path, makeExpressHandler(this.appId, route.handler));
117-
break;
118-
case 'PUT':
119-
expressApp.put(route.path, makeExpressHandler(this.appId, route.handler));
120-
break;
121-
case 'DELETE':
122-
expressApp.delete(route.path, makeExpressHandler(this.appId, route.handler));
123-
break;
124-
default:
125-
throw 'unexpected code branch';
126-
}
127-
}
115+
this.routes.forEach((route) => {
116+
let method = route.method.toLowerCase();
117+
let handler = makeExpressHandler(this.appId, route.handler);
118+
let args = [].concat(route.path, this.middlewares, handler);
119+
expressApp[method].apply(expressApp, args);
120+
});
121+
return expressApp;
128122
};
129123

130-
expressApp() {
131-
var expressApp = express();
132-
for (var route of this.routes) {
133-
switch(route.method) {
134-
case 'POST':
135-
expressApp.post(route.path, makeExpressHandler(this.appId, route.handler));
136-
break;
137-
case 'GET':
138-
expressApp.get(route.path, makeExpressHandler(this.appId, route.handler));
139-
break;
140-
case 'PUT':
141-
expressApp.put(route.path, makeExpressHandler(this.appId, route.handler));
142-
break;
143-
case 'DELETE':
144-
expressApp.delete(route.path, makeExpressHandler(this.appId, route.handler));
145-
break;
146-
default:
147-
throw 'unexpected code branch';
148-
}
149-
}
150-
return expressApp;
124+
expressRouter() {
125+
return this.mountOnto(express.Router());
151126
}
152127
}
153128

src/Routers/FilesRouter.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import mime from 'mime';
77

88
export class FilesRouter {
99

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

src/Routers/PublicAPIRouter.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,10 @@ export class PublicAPIRouter extends PromiseRouter {
152152
req => { return this.requestResetPassword(req); });
153153
}
154154

155-
expressApp() {
156-
let router = express();
155+
expressRouter() {
156+
let router = express.Router();
157157
router.use("/apps", express.static(public_html));
158-
router.use("/", super.expressApp());
158+
router.use("/", super.expressRouter());
159159
return router;
160160
}
161161
}

0 commit comments

Comments
 (0)