2017-10-09 22 views
0

我主要一个ColdFusion开发,已有10多年,但它的时间来做出改变。我正在通过将一些旧的Colfusion 9代码移植到节点js上工作,并且我正在努力连接到第三方API来访问我们公司的数据。移植遗留的ColdFusion代码的Node.js - CFHTTP/request.js

这是连接到外部服务的当前ColdFusion代码:

<cfsavecontent variable="thiscontent"> 
     <post> 
      <username>[email protected]</username> 
      <password>Pa$$w0rd</password> 
     </post> 
</cfsavecontent> 

<cfhttp url="https://API.ENDPOINT" method="post" result="httpResponse" > 
    <cfhttpparam type="FormField" name="xml" value="#Trim(thiscontent)#" /> 
</cfhttp> 

此代码查找,并返回该服务的预期XML对象。然而,有趣的是,如果我删除了'method =“post”'参数,我在尝试连接节点时遇到了同样的错误,这在一秒钟内就会发生。

为节点,我使用express.js与端点交互。这里是代码我使用:

reqOpts = { 
     url: 'http://API.ENDPOINT', 
     method: 'post', 
     headers: { 
      'Content-Type': 'application/xml' 
     }, 
     body: '<post><username>[email protected]</username><password>Pa44w0rd</password></post>' 
    } 
    var getNew = request(reqOpts, function(err, resp, body){ 
     console.log(body) 
    }) ; 

这则返回以下错误:

<?xml version="1.0"?> 
<response><status>FAILURE</status><message>No XML string passed</message></response> 

还记得我说过,从CFHTTP移除之后的参数会导致同样的错误?我似乎无法得到这个在节点工作。

我已经使用请求()。形式,请求试图AUTH等()。没有成功,总是相同的NO XML字符串传递错误。

我将非常感谢您的帮助。

回答

1

在你的ColdFusion代码你用了一个名为xml FormField。

做相同的Node.js的,而不是把XML直接在请求体的:

reqOpts = { 
    url: 'http://API.ENDPOINT', 
    method: 'post', 
    headers: { 
     'Content-Type': 'application/xml' 
    }, 
    form: { 
     xml: '<post><username>[email protected]</username><password>Pa44w0rd</password></post>' 
    } 
} 
var getNew = request(reqOpts, function(err, resp, body) { 
    console.log(body) 
}) ; 
+0

嗯,就这么简单。我不知道你可以在节点中命名这样的表单,非常感谢你指向正确的方向,我可以访问数据。 –