2016-05-15 6 views
1

Ich erhalte eine Fehlermeldung, wenn process.send in einem Kind-Prozess verwendet wird, wie in:Knoten: child_process.js: 427 wirft neuen TypeError ("Dieser Handle-Typ kann nicht gesendet werden");

process.send(someObject, function() { 
    .... 
}); 

Das Kind Prozess wie in erstellt:

var child = require('child_process'); 
var forkedProcess = child.fork(nodeScriptFile); 

Der Fehler ist:

child_process.js:427 
      throw new TypeError("This handle type can't be sent"); 
       ^
    TypeError: This handle type can't be sent 

Die Programme funktionieren auf einem Server. Ich habe versucht, einen separaten Produktionsserver zu erstellen, indem ich alle Dateien kopiere und diesen Fehler bekommen habe. Natürlich gibt es viel mehr zu den Programmen, dann den oben gezeigten Code. Ich fühle, dass ich einige Installation oder etwas Triviales übersehen habe. Ich schaute auf child-process.js Code und der Fehler wird von diesem Code ausgelöst:

verbrachte beträchtliche Zeit ... Bitte helfen Sie !!!

+1

Verwenden Sie die Callback-Funktion zu 'process.send()'? Ich bin mir ziemlich sicher, dass der Fehler dadurch verursacht wird. – robertklep

+0

@robertklep Ja, ich verwende eine Callback-Funktion, um zu senden. Allerdings habe ich das auf einem anderen Server gemacht. Nachdem ich Ihren Kommentar gelesen hatte, überprüfte ich die Nodejs-Versionen. Der, an dem es arbeitet, ist v4.4.3 und der, auf dem es nicht funktionierte, war v. .10 oder so ähnlich! Ich habe ein Upgrade auf v4.4.3 durchgeführt und es funktioniert einwandfrei. Wenn Sie Ihren Kommentar als Antwort posten, nehme ich ihn gerne an, da ich vermute, dass in der älteren Version kein Rückruf zu process.send erfolgte und er daher den Callback als Handle interpretiert? Bitte klären Sie dies in der Antwort, die Sie posten. – Sam

Antwort

1

In älteren Versionen von Node (0.10 und vielleicht auch 0.12) war process.send() synchron, so dass eine Callback-Funktion nicht akzeptiert wurde. Es hat jedoch ein optionales zweites Argument akzeptiert, sendHandle.

In Ihrem Fall, in dem Sie eine ältere Node-Version verwendet haben, wurde der Fehler ausgelöst, weil Ihr Argument Callback-Funktion für .send() kein gültiges Argument war, und deshalb fiel es durch alle handle instanceof ... Tests, die Sie in Ihrer Frage zeigten.