0

我想从 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 端点得到了相同的结果。

在此处输入图像描述

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

当我用其他东西(例如功能节点)替换 Node-RED 中的 http 请求时,对 Node-RED 的 https GET 请求运行良好,即使我使用延迟节点将响应延迟一秒左右。

4

1 回答 1

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() });
        });
    });
}
于 2019-04-29T05:05:18.103 回答