将旧的ColdFusion代码移植到Node.js - cfhttp / request.js

时间:2017-10-09 07:43:43

标签: node.js express coldfusion cfhttp

我是Coldfusion的初级开发人员,已有超过10年的时间,但现在是时候做出改变了。我正在努力将一些旧的Colfusion 9代码移植到节点js,我正在努力连接到第三方API以访问我们公司的数据。

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

<cfsavecontent variable="thiscontent">
        <post>
            <username>username@domain.com</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对象。然而,有趣的是,如果我删除&#39;方法=&#34; post&#34; &#39; perameter,我在尝试与节点连接时遇到了同样的错误,更多关于这一点。

对于node,我使用express.js与端点进行交互。这是我正在使用的代码:

reqOpts = {
        url: 'http://API.ENDPOINT',
        method: 'post',
        headers: {
            'Content-Type': 'application/xml'
        },
        body: '<post><username>user@domain.com</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中删除post参数会导致同样的错误吗?我似乎无法在节点中使用它。

我尝试过使用request()。form,request()。auth等没有成功,总是一样的NO XML STRING PASSED错误。

我将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在ColdFusion代码中,您使用了名为xml的FormField。

在Node.js中执行相同操作,而不是将XML直接放在请求正文中:

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