该操作未产生有效的响应,并意外退出

时间:2019-04-28 08:23:56

标签: ibm-cloud-functions

我想从IBM Cloud Functions调用Node-RED流。

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请求从另一台服务器获取数据。出于测试目的,我对google.com使用了GET请求,但使用另一个Node-RED端点具有相同的结果。

enter image description here

我调用Web操作后,立即收到错误消息“该操作未产生有效的响应并意外退出”。尽管Node-RED流正常且迅速地工作(我使用debug Node-RED调试节点进行了检查),但Node-RED流的输出在几秒钟后出现在Web操作的日志中。

当我用其他方式替换Node-RED中的http请求时,对Node-RED的https GET请求可以很好地工作。一个功能节点,即使我使用“延迟”节点将响应延迟一秒钟左右。

1 个答案:

答案 0 :(得分:0)

尽管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() });
        });
    });
}