SOAP with ExpressJS



基本上,我正在尝试与ExpressJS一起设置SOAP API。这是我的新工作的一个项目,在被其他离开公司的人接手后,留下了一个迷宫。

出于某些原因,他们的应用程序有50多个laravel服务器,并且一遍又一遍地使用相同的东西,这让我目前感到困惑。

在PHP中用SOAP做这类事情要比在ExpressServer下移动整个东西容易得多。我对未来的计划是制作一台服务器来处理一切,而不是在其他数百个文件夹中从x文件夹进行数百次API调用。

不管怎样,我来这里是为了得到你的帮助。。。

因此,我已经连接到他们在这里用于物流的SOAP服务器,他们需要sessionID,我从.txt文件中的auth中提取它,因为我无法从client.method.中提取它

无论如何,我用…硬编码了我的标题。。标题模型我认为

client.addSoapHeader(nameServer, 'UserSessionCredentials', options);
client.soapHeaders[0].options = options; //Options are always empty even passing the object in the .addSoapHeader That's why hardcoding it this way...maybe I'm wrong

在XML/WSDL中类似于

<UserSessionCredentials xmlns="http://www.website.net"> (changed the name for more privacy)
<UserId>int</UserId>
<clientId>string</clientId>
<SessionId>string</SessionId>
</UserSessionCredentials>

不确定这是否正确,因为我不知道下一步该怎么做,本质上是调用内部的方法从他们的平台中提取我的数据。。。

这是GetData((性质的东西,它需要一个我制作的模板,并且应该正常工作,或者即使如此,我也应该得到一个错误,不管头中缺少什么。。。

方法是这样的,至少是它的基础,因为我需要知道我提取了什么,即使它是一个空对象,对我来说仍然很好,因为我还有一点要做。

client.GetData(obj, function (err, result) {
if (err) {
console.log(err);
}
console.log(result);
});

下面的错误发生在客户端。GetData/client。GetReportData或它们拥有的任何函数。

at D:ProjectsWMSWMSIntegrationsServerlibauthpvxData.js:69:20

我一直在尝试各种方法来使它在Express中工作,但我也遇到了同样的错误。

D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcparserxmlHandler.js:473
parser.onerror = function(e) {
^
TypeError: Cannot set properties of undefined (setting 'onerror')
at XMLHandler.parseXml (D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcparserxmlHandler.js:473:20)
at Client.addSoapHeadersToEnvelope (D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcbase.js:134:20)
at Client._invoke (D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcclient.js:212:10)
at Client.GetData (D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcclient.js:103:12)
at D:ProjectsWMSWMSIntegrationsServerlibauthpvxData.js:69:20
at D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcsoap.js:54:5
at D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcsoap.js:40:7
at D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcparserwsdl.js:45:7
at D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcparserwsdl.js:130:9
at WSDL._processNextInclude (D:ProjectsWMSWMSIntegrationsServernode_modulesstrong-soapsrcparserwsdl.js:196:14)

基本上,抽象名称";obj";是报告所需的模板,但是,我仍然不明白为什么会发生错误。。。也许你们中的任何人都像我一样对SOAP有想法。我知道这是一个学习过程,但正如前面所说,我可以用Python或PHP来完成这项工作,但我不熟悉它们,我想在Express中完成所有的路由和调用,因为我不是一个经验丰富的开发人员。

我的角色叫做";"系统管理员";我的属性与开发无关,但我会借此机会发展我的分析和编码技能。(PS。公司没有为我提供发展所需技能的付费课程,我现在所做的是离线工作,也就是想办法让事情在Express中发挥作用(

在最坏的情况下,我将不得不学习PHP(比我现在知道的基础知识还多(和Laravel(我不知道如何使用它们(。老实说,我不喜欢PHP的编写方式,而且,Laravel更令人困惑。

我很感谢大家花时间阅读我的文章。

感谢您花时间阅读所有文章。经过更多的头脑风暴,我决定一个接一个地把它们拿出来,看看我在哪里犯了错误,因为代码和我的头脑中的一切都是合乎逻辑的。原来是标题写错了。当我看到其他同事在他们的PHP代码中写什么时,我在头中传递了许多变量。他们经过了命名服务器;UserSessionCredentials";我想我必须像他们一样在PHP工作中传递它们,事实证明Javascript更容易。命令是这样的,我只做我的对象,但清空。

const headerObj = {
clientID: process.env.CLIENT_ID, //clientID is static
userID: process.env.USERNAME_ID, //UserID is always the same, special made for integrations
sessionID: MySessionID,//from a file, I take it from authenticate method
}
client.addSoapHeader(headerObj);

我所要做的就是删除所有内容,只为用户传递带有clientid、userid和sessionid的对象,它神奇地对我有效

希望在接下来的几天、几周、几个月或几年里,如果你们中有人遇到和我一样的困难,会帮助你们。

最新更新