Closed gonenduk closed 6 years ago
Version 5 would be a breaking change. To avail the swagger parser module (async parser), there need to be some adjustments done in the way the application bootstrap would be happening.
https://github.com/krakenjs/swaggerize-express/blob/v5.x/CHANGELOG.md#500
Can you try to make the below change to the server.js
Start the server (or listen to port) only on route event emitted by the app. Route builder is an async api, now capable of parsing and validating remote $ref in swagger spec, so the app/server need to wait for the route event before processing requests.
Reference - https://github.com/krakenjs/swaggerize-express/blob/v5.x/test/test-swaggerize.js#L22
Also we need to add a document/examples on the usage of the 5.x version, detailing the breaking changes and new features.
Hi Again - thanks for the prompt response! I understand that the server should start the listener only after the route event is triggered. However, I get the same crash even if I don't start the server at all. So I debugged the code and I think I found the issue. In lib/expressroutes.js line 42:
validators = [];
for (var i = 0; i < route.validators.length; ++i) { validators.push(MakeValidator(route.validators[i], route.consumes)); }
route.validators is undefined, therefor is not an array and doesn't have length. I think the for statement should be run only if you have validations on the route. I tested it and it does solve the crash. I created a pull request with the fix.
cool. thanks. lemme check that.
merged the PR.
Tried to use the new v5 alpha version. Didn't change any code except the package.json file with the new version. When running, got the following error:
Unhandled rejection TypeError: Cannot read property 'length' of undefined at makeExpressRoute (/Users/gonen.dukas/Workspace/basejs/node_modules/swaggerize-express/lib/expressroutes.js:44:41) at /Users/gonen.dukas/Workspace/basejs/node_modules/swaggerize-express/lib/expressroutes.js:87:9 at Array.forEach (native) at expressroutes (/Users/gonen.dukas/Workspace/basejs/node_modules/swaggerize-express/lib/expressroutes.js:86:12) at routeBuilder.then.routeObj (/Users/gonen.dukas/Workspace/basejs/node_modules/swaggerize-express/lib/index.js:72:13) at tryCatcher (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/util.js:16:23) at Promise._settlePromiseFromHandler (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:512:31) at Promise._settlePromise (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:569:18) at Promise._settlePromise0 (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:614:10) at Promise._settlePromises (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:693:18) at Promise._fulfill (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:638:18) at Promise._resolveCallback (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:432:57) at Promise._settlePromiseFromHandler (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:524:17) at Promise._settlePromise (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:569:18) at Promise._settlePromise0 (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:614:10) at Promise._settlePromises (/Users/gonen.dukas/Workspace/basejs/node_modules/bluebird/js/release/promise.js:693:18)