我正在玩expressJS,对如何设置服务器类特别感兴趣。目前我已经写了这个(玩具东西):
export class ApplicationServer extends Server {
constructor(public config: IServerConfig) {
super(config.enableLogging);
this.app.use(express.json());
this.app.use(express.urlencoded({extended: true}));
this.setUpControllers();
}
private setUpControllers(): void {
super.addControllers([...controllers].map( (controller) => new controller()));
}
public async start(): Promise<void> {
this.app.get(
'*',
(_: express.Request, res: express.Response) => {
res.send(`Server started on port: ${this.config.port}`);
}
);
if (this.config.enableLogging) {
this.app.listen(
this.config.port,
() => Logger.Imp(`Server is listening on port: ${this.config.port}`)
);
}
}
}
然后我开始在inversityJS的帮助下设置DI,但遇到了setUpControllers
函数的问题,该函数Map示例化可用的控制器。我知道它应该通过一个特殊的DI容器进行管理,我已经设置了一个,但我还不明白如何管理这里的示例化逻辑。
我会很感激你的帮助。
编辑:
我刚发现这个https://github.com/inversify/inversify-express-utils
看起来这是一个可用的库,但这是否意味着我必须在代码中摆脱overnightJS?最重要的是,我不确定这个库是否还活着......它是否被支持?它看起来不像是被使用了很多。但我不知道现在如何在没有DI的情况下构建应用程序......
2条答案
按热度按时间gr8qqesn1#
我对inversify不是很熟悉,但是你不能将它与Server构造函数一起使用。你可以在Server周围创建另一个 Package 器类。在那里,导入Server类,示例化它,并在使用inversify的类中调用server.start()。
mznpcxlj2#
你好,我是OvernightJS的创建者。不,我不再维护这个库了。我已经超越了面向对象编程。如果你想看一个用express进行现代过程编程的例子,请看
express-generator-typescript
。