Перенос устаревшего кода ColdFusion на Node.js - cfhttp / request.js

Я являюсь основным разработчиком Coldfusion уже более 10 лет, но пришло время внести изменения. Я работаю над переносом некоторого старого кода Colfusion 9 на node js, и я изо всех сил пытаюсь подключиться к стороннему API для доступа к данным для нашей компании.

Это текущий код 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>

Помните, я сказал, что удаление параметра post из cfhttp вызывает ту же ошибку? Кажется, я вообще не могу заставить это работать в узле.

Я безуспешно пытался использовать request (). Form, request (). Auth и т. Д., Всегда одна и та же ошибка NO XML STRING PASSED.

Буду очень признателен за любую помощь.


person Matt Jones    schedule 09.10.2017    source источник


Ответы (1)


В коде ColdFusion вы использовали поле формы с именем xml.

Сделайте то же самое в 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)
}) ;
person Seybsen    schedule 09.10.2017
comment
Ну вот и все просто. Я не знал, что вы можете назвать такие формы в узле, большое спасибо за то, что указали в правильном направлении, я могу получить доступ к данным. - person Matt Jones; 09.10.2017