Nest的平台不可知论
上篇文章给大家说过Nest中的模块化思想,模块化是组织业务代码的方式,我们还需要用一个传输层(transport layer)
将业务暴露出去得以执行,例如Http服务器的话要定义路由找到执行方法,websocket则是定义一个gateway接收所有事件并进行分发。在我理解,平台不可知论说的正是这种能按照所需的暴露服务方式,灵活地进行开发与管理。这也就会意味着,不同暴露方式则会产生不一样的上下文(Context)。
下面来看看Nest中是如何进行设计的。
应用上下文
我们创建Nest应用,是通过@nestjs/core
里面的NestFactory
方法进行创建的,先看看代码
export declare class NestFactoryStatic {
create<T extends INestApplication = INestApplication>(module: any, options?: NestApplicationOptions): Promise<T>;
create<T extends INestApplication = INestApplication>(module: any, httpAdapter: AbstractHttpAdapter, options?: NestApplicationOptions): Promise<T>;
createMicroservice<T extends object>(module: any, options?: NestMicroserviceOptions & T): Promise<INestMicroservice>;
createApplicationContext(module: any, options?: NestApplicationContextOptions): Promise<INestApplicationContext>;
// 省略部分代码
}
可以看到,这里有几个创建应用的方法:
create
是创建一个Http Server App:INestApplication
createMicroservice
是创建一个微服务应用:INestMicroservice
createApplicationContext
则是创建一个独立的应用,没有任何网络监听。