Nestjs后台服务

前言

搭建后台服务需要那些准备工作呢~

JWT

对接口进行权限验证,保障数据安全~

@Module({
  imports: [
    UserModule,
    JwtModule.register({
      global: true,
      secret: jwtConstants.secret,
      signOptions: { expiresIn: '3600s' },
    }),
  ],
  providers: [AuthService, {
    provide: APP_GUARD,
    useClass: AuthGuard,
  },],
  controllers: [AuthController],
  exports: [AuthService],
})

然后配置权限守卫,自定义权限装饰器~

  async canActivate(context: ExecutionContext): Promise<boolean> {
    const isPublic = this.reflector.getAllAndOverride<boolean>(IS_PUBLIC_KEY, [
      context.getHandler(),
      context.getClass(),
    ]);
    if (isPublic) {
      return true;
    }

    const request = context.switchToHttp().getRequest();
    const token = this.extractTokenFromHeader(request);
    if (!token) {
      throw new UnauthorizedException();
    }
    try {
      const payload = await this.jwtService.verifyAsync(token, {
        secret: jwtConstants.secret,
      });
      request['user'] = payload;
    } catch {
      throw new UnauthorizedException();
    }
    return true;
  }

  private extractTokenFromHeader(request: Request): string | undefined {
    const [type, token] = request.headers.authorization?.split(' ') ?? [];
    return type === 'Bearer' ? token : undefined;
  }

 就可以使用@public装饰器去开放权限

    @Public()
    @HttpCode(HttpStatus.OK)
    @Post('login')
    signIn(@Body() signInDto: Record<string, any>) {
      return this.authService.signIn(signInDto.username, signInDto.password);
    }

SQL

配置typeorm mysql数据库~

@Module({
  imports: [
    AuthModule,
    UserModule,
    TypeOrmModule.forRoot({
      type: 'mysql',
      host: 'localhost',
      port: 3306,
      username: 'root',
      password: '',
      database: '',
      entities: [],
      synchronize: true,
    }),
    LoggerModule,
  ],
  controllers: [AppController],
  providers: [AppService,
  ],
})

注入依赖

@Module({
  imports:[TypeOrmModule.forFeature([User]),LoggerModule],
  providers: [UserService],
  exports:[UserService,TypeOrmModule],
  controllers:[UserController]
})

然后就可以使用typeorm的api进行数据增删改查~

@Get()
  queryAllUsers() {
    this.myLoggerService.customLog(UserController.name,'查询成功')
    return this.userService.findAll();
  }

  @Post('/create')
  createUser(@Body() user: Partial<User>) {
    return this.userService.createUser(user)
  }

拦截器

对响应式数据进行格式化~ 

@Injectable()
export class TransformInterceptor<T>
  implements NestInterceptor<T, Response<T>>
{
  intercept(
    context: ExecutionContext,
    next: CallHandler,
  ): Observable<Response<T>> {
    return next.handle().pipe(
      map((data) => {
        return {  ...data };
      }),
    );
  }
}

在providers中配置格式转化拦截器~ 

@Module({
  imports: [
    AuthModule,
    UserModule
  ],
  controllers: [AppController],
  providers: [AppService,
   {
     provide:APP_INTERCEPTOR,
     useClass:TransformInterceptor
   }
  ],
})

日志

自定义日志

@Injectable({ scope: Scope.TRANSIENT })
export class MyLoggerService extends ConsoleLogger {
  customLog(name,msg) {
    this.log(`${name} - ${msg}`);
  }
}

配置全局日志~ 

async function bootstrap() {
  const app = await NestFactory.create(AppModule, {
    bufferLogs: true,
  });
  app.useLogger(new MyLoggerService())
  await app.listen(3000);
}
bootstrap();

最后

后台服务就搭建起来啦~

相关推荐

  1. Nestjs后台服务

    2024-07-19 23:58:03       16 阅读
  2. Nestjs服务实战 - 动态微服务创建链接

    2024-07-19 23:58:03       51 阅读
  3. C#请求队列后台服务

    2024-07-19 23:58:03       44 阅读
  4. express框架搭建后台服务

    2024-07-19 23:58:03       44 阅读
  5. ubuntu23设置kibana后台启动服务

    2024-07-19 23:58:03       24 阅读
  6. 一个长期后台运行的服务

    2024-07-19 23:58:03       25 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 23:58:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 23:58:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 23:58:03       45 阅读
  4. Python语言-面向对象

    2024-07-19 23:58:03       55 阅读

热门阅读

  1. 昇思MindSpore 应用学习-ResNet50迁移学习-CSDN

    2024-07-19 23:58:03       18 阅读
  2. GitHub每日最火火火项目(7.19)

    2024-07-19 23:58:03       18 阅读
  3. bug-前端解决node-sass和sass-loader兼容问题

    2024-07-19 23:58:03       15 阅读
  4. 设计模式七大原则(七)合成复用原则

    2024-07-19 23:58:03       12 阅读
  5. 【时时三省】(C语言基础)字符串

    2024-07-19 23:58:03       14 阅读
  6. STM32 不同时钟频率有什么不同的影响

    2024-07-19 23:58:03       17 阅读
  7. ansible——ansible的配置文件

    2024-07-19 23:58:03       16 阅读
  8. 【算法基础】Dijkstra 算法

    2024-07-19 23:58:03       20 阅读
  9. MyBatis中的优点和缺点?

    2024-07-19 23:58:03       13 阅读
  10. linux 挂载u盘。卸载u盘

    2024-07-19 23:58:03       18 阅读