Действие не дало правильного ответа и неожиданно завершилось. - PullRequest
0 голосов
/ 28 апреля 2019

Я хочу вызвать поток Node-RED из IBM Cloud Functions.

const https = require('https');

function main(params) {
const path = "/" + params.route + "?" + params.query_params ;
const options = {
    hostname: params.hostname,
    path: path,
    port: 443,
    method: 'GET'
};

return new Promise((resolve, reject) => {
    https.get(options, (resp) => {
        resp.on('data', (d) => {
            let s = d.toString();
            obj = JSON.parse(s);
            resolve({ "gw_result": obj })
        });
    });
})

}

В потоке Node-RED я использую HTTP-запрос для получения данных с другого сервера. В целях тестирования я использовал запрос GET к google.com, но получил те же результаты, используя другую конечную точку Node-RED.

enter image description here

Как только я запускаю веб-действие, я получаю сообщение об ошибке «Действие не привело к действительному ответу и неожиданно завершилось». Вывод потока Node-RED появляется через несколько секунд в журнале веб-действия, хотя поток Node-RED работает правильно и быстро (я использовал отладочные узлы Node-RED для проверки этого).

Запрос https GET для Node-RED работает хорошо, когда я заменяю http-запрос в Node-RED чем-то другим, например, Функциональный узел, даже когда я использую узел Задержки для задержки ответа на секунду или около того.

1 Ответ

0 голосов
/ 29 апреля 2019

Этот код работает, хотя google.com, конечно, не возвращает объект.

var rp = require('request-promise');
function main(params) {
    var uri = params.hostname + params.route + params.query_params
    return new Promise(function (resolve, reject) {
        rp(uri)
        .then(function (parsedBody) {
            obj = JSON.parse(parsedBody);
            resolve({ "gw_result": obj  

            });
        })
        .catch(function (err) {
            resolve({ message: 'failed!!', error: err.toString() });
        });
    });
}
...