在node-soap中,如何查看/调试生成的XML SOAP请求?

时间:2017-02-08 16:57:01

标签: node.js soap

我尝试使用这样的node-soap模块:

const soap = require('soap');

soap.createClient('some-wsdl-url', function(err, client) {
    const args = {
        'ValidateCustomerRequest': {
            'memberNumber': 12345
        }
    };

    client.ValidateCustomer(args, function(err, result) {
        console.log(result);
    });
});

现在我收到来自网络服务的“无效格式”回复。为了调试这个,我非常想看看发送到webservice的实际XML是什么样的。

我已经尝试过这个:

require('request').debug = true

...这是another SO answer中的建议。

但输出效果不大:

[ERROR] REQUEST { uri:
  Url { ... },
  method: 'GET',
  headers:
   { 'User-Agent': 'node-soap/0.18.0',
     Accept: 'text/html,application/xhtml+xml,application/xml,text/xml;q=0.9,*/*;q=0.8',
     'Accept-Encoding': 'none',
     'Accept-Charset': 'utf-8',
     Connection: 'close',
     Host: 'xxx' },
  followAllRedirects: true,
  body: null,
  callback: [Function] }

我没有在那里看到我的“ValidateCustomerRequest”,而body也是null。另外我想知道为什么方法是GET,不应该是POST吗?

此调试输出看起来是否正常和/或是否有其他方法可以查看创建的XML请求?

1 个答案:

答案 0 :(得分:18)

我忽略了documentation

的这一点
  

客户端。 lastRequest - 包含客户端日志记录的上次完整soap请求的属性

您可以在webservice调用的回调中记录它。所以上面的代码看起来像这样:

const soap = require('soap');

soap.createClient('some-wsdl-url', function(err, client) {
    const args = {
        'ValidateCustomerRequest': {
            'memberNumber': 12345
        }
    };

    client.ValidateCustomer(args, function(err, result) {
        console.log(result);
        console.log('last request: ', client.lastRequest) // <-- here
    });
});

这将输出生成的XML请求。