nodejs實現webservice問題總結

庫,工具

node-soap
soapuinode

建立

注意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...
相關文章
相關標籤/搜索