2017-10-09 5 views
0

Je suis un développeur Coldfusion primaire, depuis plus de 10 ans mais il est temps de faire un changement. Je travaille au portage d'un ancien code Colfusion 9 sur le nœud js et j'ai du mal à me connecter à l'API tierce pour accéder aux données de notre société.Portage de code ColdFusion hérité à Node.js - cfhttp/request.js

Voici le code de Coldfusion actuel qui se connecte au service externe:

<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> 

Ce code fonctionne trouver, et renvoie l'objet XML attendu du service. Cependant, ce qui est intéressant est que si je supprime le paramètre 'method = "post"', j'obtiens la même erreur que je fais en essayant de me connecter au noeud, plus sur cela dans une seconde.

Pour le noeud, j'utilise express.js pour interagir avec le noeud final. Voici le code que je utilise:

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) 
    }) ; 

Ce retour alors l'erreur suivante:

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

Rappelez-vous quand je l'ai dit que la suppression du paramètre post de cfhttp provoque la même erreur? Je ne peux pas sembler obtenir cela pour fonctionner du tout dans le noeud.

J'ai essayé d'utiliser request(). Form, request(). Auth etc sans succès, toujours la même erreur NO XML STRING PASSED.

Je serais très reconnaissant pour toute aide.

Répondre

1

Dans votre code ColdFusion, vous avez utilisé un champ FormField nommé xml.

Faites la même chose dans Node.js au lieu de mettre le XML directement dans le corps de la requête:

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

Eh bien, aussi simple que cela. Je ne savais pas que vous pouviez nommer les formes comme ceci dans le nœud, merci beaucoup d'avoir indiqué la bonne direction, je peux accéder aux données. –