本文目录
[[toc]]
NestJS 组件
Fastify
NestJS 主要封装的是应用层的功能,底层的网络请求处理框架可以按照 adapter 修改,默认支持 Express 与 Fastify ,推荐更换为 Fastify ,性能更好。
import { FastifyAdapter } from '@nestjs/platform-fastify'
async function bootstrap() {
const app = await NestFactory.create(
AppModule,
// 使用 fastify 作为底层框架
new FastifyAdapter({
// fastify 配置
logger: false,
ignoreTrailingSlash: true,
}),
)
await app.listen(process.env.PORT ?? 3000)
}可以通过 app.getHttpAdapter().getInstance() 获取 Fastify 实例,使用 Fastify 特有的功能,比如 fastify.register(helmet, {}) 添加安全策略配置
Swagger
优先安装 Swagger ,本身可以通过 UI 的方式发起请求,省了 curl 与 postman 的时间, NestJS 官方提供了 @nestjs/swagger 实现 Swagger 支持,可以很快上手初始化:
// main.ts
async function bootstrap() {
// 初始化 NestJS 应用
const app = await NestFactory.create(AppModule)
// 初始化 Swagger
initSwagger(app)
// 监听端口
await app.listen(process.env.PORT ?? 3000)
}
bootstrap()
function initSwagger(app: INestApplication) {
// 判断是否为开发环境
const isDev = process.env.NODE_ENV === 'development'
if (!isDev) {
return
}
// 在这里初始化 Swagger 描述信息
const config = new DocumentBuilder()
.setTitle('My API')
.setDescription('My API description')
.setVersion('1.0')
.addTag('He110')
.build()
const documentFactory = () => SwaggerModule.createDocument(app, config)
// 设置 swagger 对应的 url 为 /swagger
SwaggerModule.setup('swagger', app, documentFactory)
}Prisma
使用
- Prisma 是强类型的,可以通过
npx prisma generate,根据数据描述的 Schema 生成 ORM 的类型。 - 通过
npx prisma db push --force-reset初始化数据库,同时也会测试连接状态。
环境变量
Prisma 不支持根据运行环境自动切换 .env 文件,所以像 vite 那种按照优先级启用 dotenv 的功能需要自行实现
MongoDB
连接不上数据库
连接 MongoDB 报错 Error in connector: SCRAM failure: Authentication failed.
参考 官方文档 ,在高版本的 MongoDB 中需要添加 ?authSource=admin 查询参数才能连接
无法新增数据
Prisma 连接 MongoDB 只允许在 复制集 上 开启事务 ,如果是本地部署一般没有开复制集,所以需要先 开一个复制集 ,或者连接 在线的 MongoDB Atlas
参数校验
请求参数校验 NestJS 官方推荐使用 Pipe 去处理,如果使用 zod 的话,需要搭配 nestjs-zod 。
如果按照官方的 zod 引入教程 的话,会导致 Swagger 展示出问题,读不到内容。
nestjs-zod 提供了 patchNestJsSwagger ,可以将 zod 定义的 Schema 注入到 Swagger 里面,避免重复定义数据结构问题。