2017-08-31 3 views
0

Je rencontre un problème lors du développement d'un nœud qui effectue des appels de service Web.Le nœud rouge se bloque lors de l'utilisation Demande HTTP pour appeler un service Web

J'utilise:

  • version Node-ROUGE: v0.17.5
  • Node.js Version: v8.4.0

Il est de lancer cette exception

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) 

Je l'ai e une liste de données que j'ai besoin de POST à ​​un webservice. Tout fonctionne bien jusqu'à ce que je déclenche mon message HTTP. Fondamentalement, je ce bout de code

const objects = msg.payload || [] 
    const hpptCalls = objects.map(obj => (callback) => { 
     processObject(obj, callback) 
    }) 
    async.parallelLimit(hpptCalls, 5, (err, results) => { 
     node.send(msg) 
    }) 

intérieur de ma fonction processObject, j'ai presque le même code qui existe dans le noeud central 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() 

Mais, il semble que lorsque le premier message HTTP est appelé, mon nœud rouge se bloque entièrement avec cette exception. Je peux comprendre quel est le problème. J'ai mis beaucoup d'essais en pensant que mon code brise quelque chose, mais c'est un code simple.

+1

Première vue, une partie du code essaie de cloner une classe Serveur qui n'a que des attributs en lecture ... Peut-être que vous ajoutez des données cycliques? – Fefux

+2

Le problème de base est le même que celui auquel vous avez ajouté votre commentaire hier - https://github.com/node-red/node-red/issues/1367 - Votre message contient une propriété non-clonable. Il est difficile de voir à partir de votre code quelle propriété peut être. – knolleary

Répondre

0

Apparemment trouvé le problème, comme mentionné dans le github du projet. À un point aléatoire dans le flux, quelqu'un a mis un nœud de fonction avec le code suivant

return { 
    "_msg": msg 
    [other properties] 
} 

Merci! (Il était difficile de trouver le problème lol, nous avons un gros débit).