注意args里参数顺序promise
const soap = require('soap'); let URL = "你的wsdl路径,能够是url或者本地文件"; // 注意参数顺序!!!!!!!!! let args = { key1: val1, key2: val2 }; // promise建立 let client = await soap.createClientAsync(URL); // callback建立 soap.createClient(url, function(err, client) { client.MyFunction(args, function(err, result) { console.log(result); }); });
我的喜欢promise形式,以后调用其它函数都是能够两种方式实现的,如果异步形式,须要在你调用的函数名后添加 "Async"。服务器
参数数据只有一层没什么特殊,如:异步
args = { key1: val1, key2: val2 }
如果参数里又套了一层,node-soap是不会根据wsdl自动生成带有namespace prefix的数据,传到服务器以后会解析xml失败。函数
如:工具
let val2: Array<dataType> = [ { key3: val3 } ]; let args = { key1: val1, key2: val2 }
这个时候就须要在传入数据时作些额外工做,修改成:ui
let val2: Array<dataType> = [ { key3: val3 } ]; let args = { key1: val1, key2: { dataType: val2 } }
上面这种dataType是生成xml时,其类型在xml中有声明;如果没有声明,就又是另外一中写法,如:url
// dataType或namespace prefix在生成xml未声明 let val2: Array<dataType> = [ { key3: val3 } ]; let args = { key1: val1, key2: val2 }
需改写为(此处用使用Array<string>是参考soapui生成的namespace prefix,具体其它类型实现应该可通用);spa
let val2: Array<string> = [ val3, val4 ]; let args = { attributes: { 'xmlns:arr': 'http://schemas.microsoft.com/2003/10/Serialization/Arrays' }, key1: val1, key2: { "arr:string": val2 } }
https://stackoverflow.com/que...