nestjs学习day6

26 阅读1分钟

响应拦截器

  • common/respons1.ts
import {CallHandler, ExecutionContext, Injectable, NestInterceptor} from "@nestjs/common";
import {Observable} from "rxjs";
import {map} from 'rxjs/operators'
@Injectable()
export class Response1<T> implements NestInterceptor{
    intercept(context: ExecutionContext, next: CallHandler<any>): Observable<any> | Promise<Observable<any>> {
        return  next.handle().pipe(map(data=>{
            return {
                data,
                status:0,
                message:"ok",
                success:true
            }
        }))
    }
}
  • main.ts入口中配置
import {NestFactory} from '@nestjs/core';
import {AppModule} from './app.module';
import {NestExpressApplication} from '@nestjs/platform-express'
import {Response1} from './common/response'
async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication(AppModule);
  app.useGlobalInterceptors(new Response1())
  await app.listen(3000);
}
bootstrap();

异常拦截器

  • common/filter.ts
import {ArgumentsHost, Catch, ExceptionFilter, HttpException} from "@nestjs/common";
import {Request, Response} from "express";

@Catch(HttpException)
export class HttpFilter implements ExceptionFilter{
    catch(exception: any, host: ArgumentsHost): any {
        const ctx=host.switchToHttp()
        const request=ctx.getRequest<Request>()
        const response=ctx.getResponse<Response>()
        const status=exception.getState()
        response.status(status).json({
            success:false,
            time:new Date(),
            data:exception.message,
            status,
            path:request.url
        })

    }

}
  • main.ts中配置
import {NestFactory} from '@nestjs/core';
import {AppModule} from './app.module';
import {NestExpressApplication} from '@nestjs/platform-express'

MiddleWareAll(req:Request,res:Response,next:NextFunction){
import {Response1} from './common/response'
import {HttpFilter} from './common/filter'
async function bootstrap() {
  const app = await NestFactory.create<NestExpressApplication>(AppModule);
  app.useGlobalFilters(new HttpFilter())
  app.useGlobalInterceptors(new Response1())
  await app.listen(3000);
}
bootstrap();