返回 AiToEarn
transform.interceptor.ts
根目录 / project / aitoearn-electron / server / src / interceptor / transform.interceptor.ts
1 /*
2 * @Author: nevin
3 * @Date: 2022-01-20 15:56:08
4 * @LastEditors: nevin
5 * @LastEditTime: 2025-02-25 00:28:07
6 * @Description: 全局拦截器 慢日志打印
7 */
8 import {
9 Injectable,
10 NestInterceptor,
11 CallHandler,
12 ExecutionContext,
13 Logger,
14 CanActivate,
15 } from '@nestjs/common';
16 import { map } from 'rxjs/operators';
17 import { Observable } from 'rxjs';
18 import { HttpResult } from '../global/interface/response.interface';
19
20 @Injectable()
21 export class OrgGuard implements CanActivate {
22 canActivate(context: ExecutionContext): boolean {
23 const request = context.switchToHttp().getRequest();
24 request.is_org = true;
25 return true;
26 }
27 }
28
29 @Injectable()
30 export class TransformInterceptor<T>
31 implements NestInterceptor<T, HttpResult<T>>
32 {
33 intercept(
34 context: ExecutionContext,
35 next: CallHandler<T>,
36 ): Observable<HttpResult<T>> {
37 const startTime = Date.parse(new Date().toString());
38
39 const ctx = context.switchToHttp();
40 // const response: Response<any> = ctx.getResponse();
41 const request = ctx.getRequest();
42 const reqUrl = request.originalUrl;
43
44 return next.handle().pipe(
45 map((data: T): HttpResult<T> | any => {
46 // --------- 慢日志打印警告 STR ---------
47 const ruqTime = Date.parse(new Date().toString()) - startTime;
48 if (ruqTime >= 50) {
49 Logger.verbose({
50 level: 'verbose',
51 message: `${reqUrl}::${ruqTime}ms`,
52 mate: ruqTime,
53 });
54 }
55 // --------- 慢日志打印警告 END ---------
56
57 // 不进行封装的返回
58 if (request.is_org) return data as any;
59
60 if ((data as unknown as number) !== 0 && !data && data !== false)
61 return data;
62
63 // 封装
64 return {
65 data,
66 code: 0,
67 msg: '请求成功',
68 url: reqUrl,
69 };
70 }),
71 );
72 }
73 }
74
74 lines TYPESCRIPT