返回 AiToEarn
xml.interceptor.ts
1 import {
2 CallHandler,
3 ExecutionContext,
4 Injectable,
5 NestInterceptor,
6 } from '@nestjs/common'
7 import { Observable } from 'rxjs'
8 import { switchMap } from 'rxjs/operators'
9 import * as xml2js from 'xml2js'
10
11 @Injectable()
12 export class XmlParseInterceptor implements NestInterceptor {
13 intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
14 const request = context.switchToHttp().getRequest()
15
16 return new Observable((subscriber) => {
17 xml2js.parseString(
18 request.body,
19 { explicitArray: false },
20 (err: any, result: { xml: any }) => {
21 if (err)
22 return subscriber.error(err)
23 request.body = result.xml || {}
24 subscriber.next(request)
25 subscriber.complete()
26 },
27 )
28 }).pipe(
29 switchMap(() => next.handle()), // 正确串联后续处理
30 )
31 }
32 }
33
33 lines TYPESCRIPT