gpt4 book ai didi

InversifyJS - 将中间件注入(inject) Controller

转载 作者:行者123 更新时间:2023-12-04 01:51:31 27 4
gpt4 key购买 nike

我在节点应用程序中使用快捷装饰器(@GET、@POST...)来使用 inversify-express-utils。

是否可以将中间件注入(inject) Controller 以与这些装饰器一起使用?

我正在尝试实现的示例(不起作用):

export class TestController implements Controller {
constructor(@inject(TYPES.SomeMiddleware) private someMiddleware: ISomeMiddleware) {}

@Get('/', this.someMiddleware.someMiddlewhereMethod())
public test() {
...
}

}

最佳答案

正如@OweR ReLoaDeD 所说,由于装饰器在 TypeScript 中的工作方式,目前您无法使用通过 Controller 构造函数注入(inject)的中间件来做到这一点。

但是,您可以通过将 Controller 定义包装在接受内核的函数中来实现相同的效果,如下所示:

Controller .ts

export function controllerFactory (kernel: Kernel) {

@injectable()
@Controller('/')
class TestController {
constructor() {}

@Get('/', kernel.get<express.RequestHandler>('Middleware'))
testGet(req: any, res: any) {
res.send('hello');
}
}

return TestController;
}

主.ts

let kernel = new Kernel();

let middleware: express.RequestHandler = function(req: any, res: any, next: any) {
console.log('in middleware');
next();
};

kernel.bind<express.RequestHandler>('Middleware').toConstantValue(middleware);

let controller = controllerFactory(kernel);
kernel.bind<interfaces.Controller>(TYPE.Controller).to(controller).whenTargetNamed('TestController');

let server = new InversifyExpressServer(kernel);
// ...

更新

我在 inversify-express-examples repo 中添加了一个示例展示了使用自定义和第三方中间件的这种方法。

关于InversifyJS - 将中间件注入(inject) Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39632122/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com