2017-11-24 5 views
-1

Ich verwende array.forEach() Funktion und ich erhalte eine Fehlermeldung, dassNodeJS: foreach-Schleife ist keine Funktion, Fehler

parsedBody.forEach keine Funktion ist.

Die parseBody erzeugt einen Wert, und ich habe forEach in anderen Verfahren verwendet und die Funktion funktioniert einwandfrei. Warum funktioniert forEach in diesem Fall nicht?

Bearbeiten: ParseBody ist ein Objekt. Wie mache ich daraus ein Array?


(server.js):

console.log('- before request.post'); 

      request.post({ 
       url: `${dc_link}/audit`, //includes dc_IP, dc_port and /audit 
       headers: 
        {  
        "jwt": jwt.sign(token, jwtSecret) 
       } 
      }, function(error,response,body){ //* 
        console.log('path 0'); 
        console.log('error:', error); 
        let parseBody = JSON.parse(body); 
        console.log('parseBody.additionalData', parseBody.additionalData); 

       parseBody.forEach(function(element){ //**HERE 
        console.log('path 3'); 

       }); 
       } 

(console.log):

[stdout] - before request.post 
[stdout] start respondWithJSON 
[stderr] /app/server.js:435 
[stderr]    parseBody.forEach(function(element, index, array){ //* 
[stderr]      ^
[stderr] TypeError: parseBody.forEach is not a function 
[stderr]  at Request._callback (/app/server.js:435:15) 
[stderr]  at Request.self.callback (/app/node_modules/request/request.js:188:22) 
[stderr]  at emitTwo (events.js:106:13) 
[stderr]  at Request.emit (events.js:191:7) 
[stderr]  at Request.<anonymous> (/app/node_modules/request/request.js:1171:10) 
[stderr]  at emitOne (events.js:96:13) 
[stderr]  at Request.emit (events.js:188:7) 
[stderr]  at IncomingMessage.<anonymous> (/app/node_modules/request/request.js:1091:12) 
[stderr]  at IncomingMessage.g (events.js:286:16) 
[stderr]  at emitNone (events.js:91:20) 
[stdout] path 0 
[stdout] error: null 
[stdout] parseBody.additionalData iAAGtYgBAGkCBFoW4F4DARkDAQkDAQUDAQ 
+2

Ich glaube, Parsebody ist kein Array –

+0

Überprüfen Sie, ob 'parsedBody' ist ein Array (' parseBody instanceof Array' oder so ähnlich) – KooiInc

+0

@Andreas er versucht zu dekodieren 'ParseBody', nicht' ParseBody.additionalData' – Azuloo

Antwort

1

parseBody ein Objekt zu sein scheint, da Sie es mit Punkt Zugriff sind Notation. Sie benötigen ein Array, um die forEach-Methode zu verwenden. Verwandle parseBody in ein Array und das Problem ist gelöst.

Um es in ein Array zu drehen, hier ist eine mögliche Lösung:

var arr = Object.keys(parseBody).map(function(key){ return parseBody[key]; }); 
+0

Wie kann ich die ParseBody-Objekt in ein Array . Ich versuchte mit parseBody.toArray (array_result) => {array_result.forEach ((Element) => {console.log ('Pfad 3');}); Aber es funktioniert nicht. – computerguy1234

+0

Ich aktualisierte meine Antwort mit einem möglichen Weg. –

0

Ich denke parseBody ein Objekt und nicht ein Array so kippen Sie foreach verwenden, versuchen Sie vielleicht dies:

for(var key in parseBody){ 
console.log("result: " + parseBody[key]); 
}