You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS-soap中记录发送至SOAP接口的XML请求体?

实现查看/记录SOAP请求XML的方法

下面提供两种可行的方案,根据你的需求选择:

方案一:监听SOAP Client的request事件(精准捕获请求体)

在你的服务中,注入soapClient后,通过监听它的request事件来获取每次发送的XML请求内容,代码示例:

import { Inject, Injectable, Logger } from '@nestjs/common';
import { Client } from 'soap';

@Injectable()
export class YourSoapService {
  private readonly logger = new Logger(YourSoapService.name);

  constructor(
    @Inject(process.env.APP_NAME)
    private readonly soapClient: Client,
  ) {
    // 监听request事件,捕获请求XML
    this.soapClient.on('request', (xml: string) => {
      this.logger.log('SOAP 请求XML:', xml);
      // 这里可以将xml写入日志文件、存储到数据库,或者做其他处理
    });
  }

  async addNumbers() {
    return await this.soapClient.AddAsync({
      intA: 1,
      intB: 2,
    });
  }
}

每次调用SOAP接口时,事件回调都会触发,你可以在里面直接打印或持久化XML内容。

方案二:通过clientOptions开启调试日志(快速查看请求/响应)

在SoapModule.forRoot的配置中,给clientOptions添加参数,让SOAP客户端自动输出请求和响应的详细信息:

方式1:开启debug模式

imports: [
  SoapModule.forRoot({
    clientName: process.env.APP_NAME,
    uri: process.env.URL,
    clientOptions: {
      debug: true, // 开启后会自动打印请求、响应的XML及其他调试信息
    },
  }),
]

开启后,控制台会输出包含请求XML的调试日志,不过同时也会打印响应XML和其他内部信息。

方式2:自定义日志器(灵活控制输出)

如果只想关注请求XML,可以自定义日志器过滤内容:

imports: [
  SoapModule.forRoot({
    clientName: process.env.APP_NAME,
    uri: process.env.URL,
    clientOptions: {
      logger: {
        log: (message: string) => {
          // 过滤提取请求XML部分
          if (message.includes('request')) {
            console.log('SOAP 请求XML:', message.split('\n').slice(1).join('\n'));
          }
        },
      },
    },
  }),
]

这样可以只打印请求XML内容,避免过多无关日志干扰。

内容的提问来源于stack exchange,提问作者Dewvie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 15:52:26