「埃尔法哥哥」nestjs使用Typeorm实现数据库CRUD操作( 二 )


controllers: [AppController], // 当前模块的控制器集合
providers: [
{
provide: APP_INTERCEPTOR,
useClass: ErrorsInterceptor
},
AppService
], // 当前模块的提供者集合
exports: [], // 导出当前模块的提供者 , 用于被其他模块调用
})
export class AppModule { }
2.4 main.ts入口文件
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule); // 创建应用程序实例 , 此时所有被 AppModule 导入的其他模块的所有实例都会被加载
await app.listen(3000); // 使用3000端口监听应用程序
}
bootstrap(); // 启动应用程序 -> localhost:3000
2.5 app.controller.spec.ts测试文件
修改了上述文件之后 , 命令行默认生成的测试文件也需要修改为异步的方式才能通过测试 。
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appController: AppController;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
appController = app.get (AppController);
});
describe('get', () => {
it('should return "Hello World!"', async() => {
const data=http://news.hoteastday.com/a/await appController.root();
expect(data).toBe('Hello World!');
});
});
});
3. 通用错误处理和接口文件
在项目实践中 , 注入错误处理、接口等模块化文件需要重复使用 。 最好集中在公用模块中 。 在项目根目录下创建common文件夹 , 并新建错误处理和接口模块 。
「埃尔法哥哥」nestjs使用Typeorm实现数据库CRUD操作
本文插图
3.1 common/errors.interceptor.ts错误处理文件
import { CallHandler, ExecutionContext, HttpException, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
import { catchError } from 'rxjs/operators';
@Injectable()
export class ErrorsInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable {
// 异常拦截器 , 拦截每个请求中的异常 , 目的是将异常码和异常信息改写为 { code: xxx, message: xxx } 类型
return next.handle().pipe(catchError((error, caught): any => {
if (error instanceof HttpException) {
return Promise.resolve({
code: error.getStatus(),
message: error.getResponse()
});
}
return Promise.resolve({
code: 500,
message: `出现了意外错误:${error.toString()}`
});
}));
}
}
3.2 common/result.interface.ts接口文件
// 定义通用的API接口返回数据类型
export interface Result {
code: number;
message: string;
data?: any;
}
4.创建数据库增删读写API文件
在根目录下新建cat文件夹 , 并依次创建下列文件 。
4.1 cat.controller.ts