From d7f5e248f505e134196ef1001803b6603ede4a49 Mon Sep 17 00:00:00 2001 From: Raphael Tomchinsky Date: Sat, 23 Nov 2019 15:16:21 -0300 Subject: [PATCH] fix(autoBindInjectable): allow middlewares to be auto bound --- src/server.ts | 4 +++- test/base_middleware.test.ts | 40 +++++++++++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/server.ts b/src/server.ts index 2890c94c..44c97d64 100644 --- a/src/server.ts +++ b/src/server.ts @@ -187,7 +187,9 @@ export class InversifyExpressServer { private resolveMidleware(...middleware: interfaces.Middleware[]): express.RequestHandler[] { return middleware.map(middlewareItem => { - if (!this._container.isBound(middlewareItem)) { + if (!this._container.options.autoBindInjectable + && !this._container.isBound(middlewareItem) + || !this._container.get(middlewareItem)) { return middlewareItem as express.RequestHandler; } diff --git a/test/base_middleware.test.ts b/test/base_middleware.test.ts index ec54a592..29b065cf 100644 --- a/test/base_middleware.test.ts +++ b/test/base_middleware.test.ts @@ -9,7 +9,8 @@ import { httpGet, BaseMiddleware, BaseHttpController, - interfaces + interfaces, + response } from "../src/index"; import { cleanUpMetadata } from "../src/utils"; @@ -291,6 +292,43 @@ describe("BaseMiddleware", () => { }); }); + + it("Should resolve middlewares if autoBindInjectable is set to true", (done) => { + + @injectable() + class AutoBoundMiddleware extends BaseMiddleware { + + public handler( + req: express.Request, + res: express.Response, + next: express.NextFunction + ) { + res.locals.value = "This was auto bound"; + next(); + } + } + + @controller("/autobind") + class AutoBoundMiddlewareTestController extends BaseHttpController { + + @httpGet( + "/", + AutoBoundMiddleware + ) + public getTest(@response() res: express.Response) { + return res.locals.value; + } + } + + const container = new Container({ autoBindInjectable: true }); + + const app = new InversifyExpressServer(container).build(); + + supertest(app) + .get("/autobind") + .expect(200, "This was auto bound", () => done()); + + }); }); function run(parallelRuns: number, test: (executionId: number) => PromiseLike, done: (error?: Error) => void) {