xml - 尝试通过 Node 调用国家铁路 SOAP API 时出现类型错误

标签 xml node.js soap typeerror node-soap

我正在尝试使用 node-soap 访问国家铁路 API .

文档位于:https://lite.realtime.nationalrail.co.uk/OpenLDBWS/

我是 SOAP 新手,因此这可能不是 API 的问题。无论我尝试什么,我都会遇到 TypeError...

TypeError: Cannot read property 'Body' of undefined

这是我用来尝试调用电话的代码:

var soap = require('soap');
var url = 'https://lite.realtime.nationalrail.co.uk/OpenLDBWS/wsdl.aspx?ver=2014-02-20';
var soapHeader = '<com:AccessToken>MY_TOKEN</com:AccessToken>';

soap.createClient(url, function(err, client){

  var args = {
    numRows : 10,
    crs : 'LAN'
  };

  client.addSoapHeader(soapHeader);

  client.GetDepartureBoard(args, function(err, result){
    if(err){
      console.log('error!');
      throw err;
    }
    console.log(result);
  });  
});

使用node-soap我还可以获得请求信封,这是内容:

<soap:Envelope
    xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:tns="http://thalesgroup.com/RTTI/2014-02-20/ldb/"
    xmlns:tok="http://thalesgroup.com/RTTI/2013-11-28/Token/types"
    xmlns:ct="http://thalesgroup.com/RTTI/2007-10-10/ldb/commontypes"
    xmlns:ldbt="http://thalesgroup.com/RTTI/2012-01-13/ldb/types"
    xmlns:ldbt2="http://thalesgroup.com/RTTI/2014-02-20/ldb/types">
    <soap:Header>
        <com:AccessToken>MY_TOKEN</com:AccessToken>
    </soap:Header>
    <soap:Body>
        <tns:GetDepartureBoardRequest
            xmlns:tns="http://thalesgroup.com/RTTI/2014-02-20/ldb/"
            xmlns="http://thalesgroup.com/RTTI/2014-02-20/ldb/">
            <tns:numRows>10</tns:numRows>
            <tns:crs>LAN</tns:crs>
        </tns:GetDepartureBoardRequest>
    </soap:Body>
</soap:Envelope>

最佳答案

您的 SOAP header 格式不正确,它需要 '<'AccessToken'>''<'/AccessToken'>' 包裹在它周围

var args, soap, soapHeader, url;

soap = require('soap');

url = 'https://lite.realtime.nationalrail.co.uk/OpenLDBWS/wsdl.aspx?ver=2014-02-20';

soapHeader = '<AccessToken><TokenValue>Your access token</TokenValue></AccessToken>'

// or you can write it as an object
//soapHeader = {
//    AccessToken: {
//        TokenValue: "Your access token"
//    }
//};

args = {
    numRows: 10,
    crs: 'BSK'
};

soap.createClient(url, function(err, client) {
    client.addSoapHeader(soapHeader);
    return client.GetArrivalDepartureBoard(args, function(err, result) {
        return console.log(JSON.stringify(result));
    });
});

关于xml - 尝试通过 Node 调用国家铁路 SOAP API 时出现类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28399266/

相关文章:

javascript - 我可以在没有 Nodejs 的情况下使用 Angularjs2 (ES6) 吗?

java - 发送到 SOAP 不起作用

java - 未找到 [SaajSoapMessage 的端点映射,SOAP WS 执行期间出现异常

javascript - 如何在 SOAP 中传递 Null?

java - 将 XML 作为 CLOB 传递给 Oracle 会出现 "ORA-22922: nonexistent LOB value"错误

java- 以树结构显示 xml 的框架/库/在 XML 中启用自动完成

java - 在 Android 上使用 BufferedReader 时导致 java.net.SocketTimeoutException 的原因是什么?

java - 使用 schemaLocation 引用位于 jar 中的 XSD?

node.js - 如何使用 Multer 中间件验证文件扩展名

android - 不能再添加 Android 平台和构建 ionic 项目了吗?