Metadata
- Source
- KETTLE-27
- Type
- Improvement
- Priority
- Major
- Status
- Resolved
- Resolution
- Fixed
- Assignee
- Antranig Basman
- Reporter
- Antranig Basman
- Created
2014-12-17T11:28:08.230-0500 - Updated
2015-07-02T18:08:58.716-0400 - Versions
- N/A
- Fixed Versions
- N/A
- Component
- N/A
Description
We are working on the OAuth2 integration for the cloud-based flow manager in GPII. This involves co-locating a traditionally-written express application (AuthServer.js) within the same express app as the surrounding Kettle app for the GPII. We ran into an obscure-seeming issue where, whenever any kind of routed handler (e.g. one registered with app.get or app.post etc.) was registered before the bodyParser middleware, ALL such handlers ended up notified before the body parsing process was complete. Here are some traces:
A correct trace leading to matchPost with a valid request body:
at gpii.flatMatchMaker.matchPost (E:\source\gits\gpii\node_modules\universal\gpii\node_modules\flatMatchMaker\src\FlatMatchMaker.js:70:21)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1649:29)
at E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1865:20
at Object.fluid.tryCatch (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:219:24)
at fluid.withEnvironment (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1860:22)
at Object.fluid.event.invokeListener (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1052:25)
at togo (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1707:36)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.fluid.fireEvent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1210:24)
at Object.fluid.initDependent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1301:15)
at E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1322:23
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at kettle.requests.handleRequest (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\request.js:76:31)
at Object.invoke (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1608:25)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1635:32)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
-
- at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:140:46
at callbacks (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:164:37)
at param (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:138:11)
at pass (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:145:5)
at Router._dispatch (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:173:5)
at Object.router (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:33:10)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15) - at urlencoded (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\middleware\urlencoded.js:38:27)
at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\middleware.js:136:17
at E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\middleware\json.js:81:7
at IncomingMessage.onEnd (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\node_modules\raw-body\index.js:109:7)
at IncomingMessage.g (events.js:180:16)
at IncomingMessage.emit (events.js:92:17)
at _stream_readable.js:938:16
at process._tickCallback (node.js:419:13)
- at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:140:46
An erroneous trace, resulting in an empty body:
at gpii.flatMatchMaker.matchPost (E:\source\gits\gpii\node_modules\universal\gpii\node_modules\flatMatchMaker\src\FlatMatchMaker.js:70:21)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1649:29)
at E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1865:20
at Object.fluid.tryCatch (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:219:24)
at fluid.withEnvironment (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1860:22)
at Object.fluid.event.invokeListener (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1052:25)
at togo (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1707:36)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.fluid.fireEvent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1210:24)
at Object.fluid.initDependent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1301:15)
at E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1322:23
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at kettle.requests.handleRequest (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\request.js:76:31)
at Object.invoke (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1608:25)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1635:32)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
-
- at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:140:46
at callbacks (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:164:37)
at param (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:138:11)
at pass (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:145:5)
at Router._dispatch (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:173:5)
at Object.router (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:33:10)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15) - at SessionStrategy.strategy.pass (E:\source\gits\gpii\node_modules\universal\node_modules\passport\lib\middleware\authenticate.js:318:9)
at SessionStrategy.authenticate (E:\source\gits\gpii\node_modules\universal\node_modules\passport\lib\strategies\session.js:67:10)
at attempt (E:\source\gits\gpii\node_modules\universal\node_modules\passport\lib\middleware\authenticate.js:341:16)
at Object.authenticate [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\passport\lib\middleware\authenticate.js:342:7)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.initialize [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\passport\lib\middleware\initialize.js:62:5)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.session [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\express-session\index.js:361:7)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.urlencodedParser [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\body-parser\lib\types\urlencoded.js:72:36)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:168:78) - at kettle.requests.request.http.proceed (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\request.js:184:9)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1649:29)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.fluid.fireEvent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1210:24)
at Object.fluid.initDependent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1301:15)
at listener (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:589:27)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.handle (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:260:38)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.expressInit [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\middleware.js:30:5)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.query [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\middleware\query.js:45:5)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Function.app.handle (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:201:3)
at Server.app (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\connect.js:65:37)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIncoming (http.js:2108:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23)
at Socket.socket.ondata (http.js:1966:22)
at TCP.onread (net.js:527:27)
- at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:140:46
Points labelled "**" correspond to dispatches into Kettle code, and points labelled "--" represent points of divergence between the traces. Removing the "require" statement for the standalone bodyParser used by the auth server resulted in this 3rd variant trace:
Error
at gpii.flatMatchMaker.matchPost (E:\source\gits\gpii\node_modules\universal\gpii\node_modules\flatMatchMaker\src\FlatMatchMaker.js:70:21)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1649:29)
at E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1865:20
at Object.fluid.tryCatch (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:219:24)
at fluid.withEnvironment (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1860:22)
at Object.fluid.event.invokeListener (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1052:25)
at togo (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1707:36)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.fluid.fireEvent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1210:24)
at Object.fluid.initDependent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1301:15)
at E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1322:23
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at kettle.requests.handleRequest (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\request.js:76:31)
at Object.invoke (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1608:25)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1635:32)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
-
- at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:141:46
at callbacks (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:164:37)
at param (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:138:11)
at pass (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:145:5)
at Router._dispatch (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:173:5)
at Object.router (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\router\index.js:33:10)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15) *- at kettle.requests.request.http.proceed (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\request.js:184:9)
at invokeInvoker (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1649:29)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.fluid.fireEvent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1210:24)
at Object.fluid.initDependent (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:1301:15)
at listener (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\FluidIoC.js:589:27)
at fireToListeners (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1103:68)
at Object.that.fire (E:\source\gits\gpii\node_modules\universal\node_modules\infusion\src\framework\core\js\Fluid.js:1196:24)
at Object.handle (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:262:38)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.expressInit [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\express\lib\middleware.js:30:5)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Object.query [as handle] (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\middleware\query.js:45:5)
at next (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:193:15)
at Function.app.handle (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\proto.js:201:3)
at Server.app (E:\source\gits\gpii\node_modules\universal\node_modules\express\node_modules\connect\lib\connect.js:65:37)
at Server.emit (events.js:98:17)
at HTTPParser.parser.onIncoming (http.js:2108:12)
at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:121:23)
at Socket.socket.ondata (http.js:1966:22)
at TCP.onread (net.js:527:27)
- at kettle.requests.request.http.proceed (E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\request.js:184:9)
- at E:\source\gits\gpii\node_modules\universal\node_modules\kettle\lib\server.js:141:46
We need to support (at least) 2 lifecycle points for a Kettle server, one where middleware may be contributed and one where routed handlers may be contributed. It appears this situation differs in Express 4.x where the router is no longer a piece of middleware in itself.
Comments
-
Antranig Basman commented
2015-07-02T18:08:58.684-0400 Merged into trunk at revision e79bb81196df68c97eaa9f96c485a4321b69af75