2017-02-22 45 views
2

我正在從一個Web應用程序使用服務的桌面應用程序(使用Electron框架),爲此我使用node.js soap包進行請求和所有運作良好。簡單的SOAP客戶端,用於使用javascript或java使用Web服務

但突然間我被要求遷移桌面應用程序,使其成爲一個僅客戶端的Web應用程序。

我的問題: 我不知道如何更改節點代碼,使其在瀏覽器中工作。我對Web開發沒有多少經驗,而且我有很多疑問和問題。

我試了一下:

  • 使用JavaScript,使用XMLHttpRequest();但我得到CORS問題

  • 使用Browserify捆綁的代碼,但我得到fs.readFileSync(錯誤)

我的問題:

  • 我可以一個純JavaScript肥皂請求,沒有問題 來自交叉來源? (我被告知這是不可能的,但我想 確認它)

  • 有什麼辦法可以在瀏覽器中使用下面的代碼(與節點模塊)? (使用 工具,如browserify)

  • 如果我必須爲這個請求做一個Java類,我會有 阻止像JavaScript一樣的跨源請求?如果不是如何,我應該怎麼做?

如果可能的話,我想的代碼示例或體系結構應該如何

域的應用程序在Tomcat的一個解釋:

http://localhost:8080/AppWithWebServices/ws/core.wsdl - > Web服務消費 http://localhost:8080/clientApp/soapRequest.js - - >向網絡服務請求文件

代碼從我的桌面應用程序與soap請求(soapRequest。 JS):

var soap = require('soap'); 
var request = require('request'); 
const {ipcRenderer} = require('electron'); 
window.ipc = ipcRenderer; 

Submit = function(){ 
    var user = document.getElementById("username").value; 
    var passw = document.getElementById("password").value; 

    //Class with the wsdl url and the header and body for the request 
    var auth = new authentication(user,passw); 

    soap.createClient(auth.getWsdlURL(), function(err, soapClient){ 
     if (err){ 
      console.log("error en creacion cliente Soap"); 
     } 

     //The soap request needs a security header with user and password 
     //to be able to consume the web services 
     soapClient.addSoapHeader(auth.getSoapHeader()); 

     soapClient.ServiceToConsume(auth.soapRequestBody(), function(err, result) { 
       if (!err){  
       //Redirect to Home.html    
       ipc.send('redirectHome', user, result); 
       } 
       else{    
       document.getElementById("login").innerHTML = "El nombre de usuario o contraseña es incorrecto"; 
       } 
      }); 
    }); 

}; 

回答

1

由於soapthe readme page說,這是

爲node.js中一個SOAP客戶機和服務器

考慮您的錯誤信息,這似乎依賴於節點的文件系統API:

fs.readFileSync() 

除非庫支持它,你將有一個很難得到它,並在你的瀏覽器中運行,因爲節點的API在此環境中不一定可用。

您可以查找能夠在瀏覽器中運行的不同SOAP庫。但是,JavaScript和SOAP永遠不會完美地結合在一起。從長遠來看,在服務器端實現中間件可能會更好,它將SOAP服務映射到以JSON格式提供數據的RESTful服務,您可以從前端輕鬆使用這些服務,而無需特殊的庫。

關於CORS問題,您可以在加載來自不同來源的文件時獨立於HTTP調用的目的來避免此限制。 MDN gives some more details on this topic.

相關問題