2012-10-19 3 views
10

Ich habe ein phantomJS Skript, das über einen exec() Aufruf in einem node.js Skript ausgeführt wird. Jetzt muss ich eine Zeichenfolge aus dem PhantomJS-Skript zurückgeben, damit sie im Knoten wieder verwendet werden kann.
Gibt es einen Weg, das zu erreichen?Übergabe eines Wertes von PhantomJS an node.js

Knoten App:

child = exec('./phantomjs dumper.js', 
    function (error, stdout, stderr) { 
     console.log(stdout, stderr);  // Always empty 
    }); 

dumper.js (Phantom)

var system = require('system'); 
var page = require('webpage').create(); 
page.open(system.args[1], function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access the network!'); 
    } else { 

     return "String"; // Doesn't work 
    } 
    phantom.exit('String2'); //Doesn't work either 
}); 

Antwort

10

Ja gerade Ausgabe ein JSON-String aus PhantomJS JSON.stringify(result) verwenden und analysieren es in node.js mit JSON.parse(stdout) .

wie dies zum Beispiel:

Node.js:

child = exec('./phantomjs dumper.js', 
    function (error, stdout, stderr) { 
     console.log(stdout, stderr);  // Always empty 
     var result = JSON.parse(stdout); 
    } 
); 

PhantomJS:

var system = require('system'); 
var page = require('webpage').create(); 
page.open(system.args[1], function (status) { 
    if (status !== 'success') { 
     console.log('Unable to access the network!'); 
    } else { 

     console.log(JSON.stringify({string:"This is a string", more: []})); 
    } 
    phantom.exit(); 
}); 

Here is some boilerplate für wie PhantomJS verwenden zu kratzen.

+0

Danke, aber wo sollte ich den Aufruf JSON.stringify ('Ergebnis') setzen? nach einer return statment oder als Parameter der exit-Methode (Just versucht beide und scheint nicht für mich arbeiten) – silkAdmin

+0

Sie müssen tatsächlich nicht JSON verwenden, wenn Sie nur eine Zeichenfolge übergeben möchten. Ich empfehle Ihnen, JSON zu verwenden, weil Sie mehr tun möchten. Wenn Sie PhantomJS verwenden, um Daten zu verwerfen, können Sie viele Daten freigeben. – 3on

+0

ok danke nochmal, das funktioniert in der Tat, was mich verwirrt ist, dass comming von der Browser-Seite, ich erwarte console.log nur eine Möglichkeit zu sein, informative Daten zu enthüllen eher eine Möglichkeit, tatsächlich Sachen zurückzugeben .. – silkAdmin

0

Viel einfacher (wenn Sie die Option haben) ist die Verwendung des NPM-Moduls phantom anstelle von phantomjs. Dadurch können Sie direkt in nodejs auf den Browser zugreifen, anstatt separate Skripts zu verwalten.