前言
在Nest.js中,Nest.js提供了IOC、AOP等特性,而且还对WebSocket、GraphQL、ORM等技术有不小的支持。
当我们用Node去写后端服务时,会面临三种选择。
- 直接使用
http、https模块。 - 使用
express、koa等请求处理库。 - 使用
Nest.js企业级框架。
当我们使用Java去写后端时,我们会使用http模块手动处理嘛?当然不是,我们首选的肯定是Spring这种一站式的企业级框架。
同样,Nest.js就是Node中的Spring。
Nest.js通过适配器切换请求库
但是,Nest.js并没有和Express强耦合,它有一层抽象层,通过适配器方法去让我们自由切换请求处理库。
Nest.js定义了HttpServer接口
然后封装了AbstractHttpAdapter的class
在Nest.js中,分别提供了Express和fastity的Adapter实现。
当然,Exprees的Adapter是Nest.js默认提供的,如果需要查看fastity的Adapter则需要下载对应的包
npm install fastify @nestjs/platform-fastify
下载之后则可以看到fastity的Adapter。
怎么修改成fastity请求库
这是Express请求库的main.ts文件内容
我们只需要修改成这样
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { FastifyAdapter, NestFastifyApplication} from '@nestjs/platform-fastify';
async function bootstrap() {
const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter());
await app.listen(3000);
}
bootstrap();
这样就可以切换成fastify请求库了。
思考
为什么Nest.js要这样做呢?
为什么可以使我们轻松的切换http处理库呢?
因为 Nest 的核心还是在于 IOC、AOP 这些架构特性,像 express、fastify 只不过是请求、响应的方法不同而已,区别并不大。
万一Nest.js与Express或fastity其中之一的http处理库强耦合,万一有更好的http处理库供我们选择呢?
这种加一层抽象和适配器的方式,能让 Nest.js 更加通用、灵活,有更强的扩展性。