我使用meteor的http
包连接到通过SOAP消息进行通信的服务器。以下是代码(没有原始URL,名称空间,方法名称和参数):
HTTP.call('POST', 'http://soap-service-url.com', { auth: 'user:password', headers: { SOAPTarget: 'http://soap-service-url.com', SOAPAction: 'http://required-namespace.com/methodName', 'Content-Type': 'text/xml' }, params: { parameter1: "parameterValue", parameter2: '<?xml version="1.0"?><some-xml-goes-here>', }, content: '<?xml version="1.0" encoding="utf-8"?>' + '<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' + 'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' + 'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' + '<soap:Body> ' + '<m:methodName xmlns:m="http://required-namespace.com"> ' + '<m:parameter1 xsi:type="xsd:string">parameterValue</m:parameter1>' + '<m:parameter2 xsi:type="xsd:string"><![CDATA[<?xml version="1.0"?><some-xml-goes-here>]]></m:parameter2>' + '</m:methodName> ' + '</soap:Body> ' + '</soap:Envelope>' }, function (err, result) { if (err) { console.log('error occurred..'); console.log(err); return; } console.log(result); console.log('----------------------'); });
当我调用没有参数的方法时,我可以获得预期的输出。但是当我用参数调用方法时,我得到了意想不到的输出。由于content属性中给出的参数没有传递,我添加了params属性,即使这样我也无法收到预期的输出。为了测试这个问题,我创建了一个节点js应用程序,并使用node-soap
模块连接到同一个服务器。我可以通过client.myMethod(args, callback[, options])
上的参数传递参数并获得预期结果。如何在使用meteor的http包时传递参数?
答案 0 :(得分:1)
要回答上述问题:在content
http.call
parameter1
之前将content
xml建为字符串,Error: Cannot parse response
字符串中包含2个值。
上面的代码示例帮助了我很多,因为我无法让node-soap在Meteor中工作;永远得到{{1}} - 谢谢 - 我知道这是一篇很老的帖子,你现在可能已经找到了答案。