使用 http 请求调用 Web 服务时节点红色崩溃
Node red crashing when use http request to call a webservice
我在开发进行 Web 服务调用的节点时遇到问题。
我正在使用:
- Node-RED 版本:v0.17.5
- Node.js版本:v8.4.0
正在抛出异常
node-red_1 | 30 Aug 21:21:50 - [red] Uncaught Exception:
node-red_1 | 30 Aug 21:21:50 - TypeError: Cannot set property listening of #<Server> which has only a getter
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:16)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at clone (/usr/src/node-red/node_modules/clone/clone.js:196:10)
node-red_1 | at Object.cloneMessage (/usr/src/node-red/node_modules/node-red/red/runtime/util.js:53:13)
node-red_1 | at /usr/src/node-red/node_modules/node-red/red/runtime/nodes/flows/Flow.js:262:48
node-red_1 | at Array.forEach (<anonymous>)
node-red_1 | at Flow.handleError (/usr/src/node-red/node_modules/node-red/red/runtime/nodes/flows/Flow.js:256:34)
我有一个数据列表,我需要 POST 到网络服务。
一切正常,直到我启动 HTTP post。
基本上,我有这段代码
const objects = msg.payload || []
const hpptCalls = objects.map(obj => (callback) => {
processObject(obj, callback)
})
async.parallelLimit(hpptCalls, 5, (err, results) => {
node.send(msg)
})
在我的 processObject 函数中,我有几乎相同的代码存在于核心节点 21-httprequest.js
const req = http.request(options, res => {
let data = ''
res.on('data', chunk => {
data += chunk
})
res.on('end', () => {
callback(null)
})
})
req.setTimeout(120000, () => {
node.error('Error', msg)
req.abort()
callback('Error')
})
req.on('error', err => {
node.error(err, msg)
callback(err)
})
if (content) {
req.write(JSON.stringify(content))
}
req.end()
但是,似乎在调用第一个 HTTP post 时,我的 node-red 因该异常而完全崩溃。我能弄清楚是什么问题。我进行了很多尝试,认为我的代码破坏了某些东西,但它是一个简单的代码。
显然发现了问题,正如项目 github 中提到的那样。在流程中的一个随机点,有人用以下代码放置了一个功能节点
return {
"_msg": msg
[other properties]
}
谢谢! (好不容易找到问题了哈哈,我们流量大)
我在开发进行 Web 服务调用的节点时遇到问题。
我正在使用:
- Node-RED 版本:v0.17.5
- Node.js版本:v8.4.0
正在抛出异常
node-red_1 | 30 Aug 21:21:50 - [red] Uncaught Exception:
node-red_1 | 30 Aug 21:21:50 - TypeError: Cannot set property listening of #<Server> which has only a getter
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:16)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at _clone (/usr/src/node-red/node_modules/clone/clone.js:156:18)
node-red_1 | at clone (/usr/src/node-red/node_modules/clone/clone.js:196:10)
node-red_1 | at Object.cloneMessage (/usr/src/node-red/node_modules/node-red/red/runtime/util.js:53:13)
node-red_1 | at /usr/src/node-red/node_modules/node-red/red/runtime/nodes/flows/Flow.js:262:48
node-red_1 | at Array.forEach (<anonymous>)
node-red_1 | at Flow.handleError (/usr/src/node-red/node_modules/node-red/red/runtime/nodes/flows/Flow.js:256:34)
我有一个数据列表,我需要 POST 到网络服务。 一切正常,直到我启动 HTTP post。 基本上,我有这段代码
const objects = msg.payload || []
const hpptCalls = objects.map(obj => (callback) => {
processObject(obj, callback)
})
async.parallelLimit(hpptCalls, 5, (err, results) => {
node.send(msg)
})
在我的 processObject 函数中,我有几乎相同的代码存在于核心节点 21-httprequest.js
const req = http.request(options, res => {
let data = ''
res.on('data', chunk => {
data += chunk
})
res.on('end', () => {
callback(null)
})
})
req.setTimeout(120000, () => {
node.error('Error', msg)
req.abort()
callback('Error')
})
req.on('error', err => {
node.error(err, msg)
callback(err)
})
if (content) {
req.write(JSON.stringify(content))
}
req.end()
但是,似乎在调用第一个 HTTP post 时,我的 node-red 因该异常而完全崩溃。我能弄清楚是什么问题。我进行了很多尝试,认为我的代码破坏了某些东西,但它是一个简单的代码。
显然发现了问题,正如项目 github 中提到的那样。在流程中的一个随机点,有人用以下代码放置了一个功能节点
return {
"_msg": msg
[other properties]
}
谢谢! (好不容易找到问题了哈哈,我们流量大)