2012-10-19 14 views
10

Bir node.js komut dosyasında bir exec() çağrı yoluyla yürütülen bir phantomJS komut dosyası var. Artık bir dizeyi PhantomJS komut dosyasından döndürmem gerekiyor, böylece düğümde tekrar kullanılabilir.
Bunu başarmanın bir yolu var mı?Bir değerin PhantomJS'den node.js'ye geçirilmesi

Düğüm uygulaması:

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

dumper.js (Fantom)

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 
}); 

cevap

10

Evet PhantomJS sadece çıkış bir JSON dize JSON.stringify(result) kullanarak ve JSON.parse(stdout) ile node.js bunu ayrıştırmak . Örneğin bu gibi

:

node.js:

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

PhantomJS: kazımak için PhantomJS nasıl kullanılacağı için

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.

+0

Teşekkürler, ancak JSON.stringify ('sonuç') çağrısını nereye koymalıyım? Bir dönüş beyanından sonra veya çıkış yönteminin bir parametresi olarak (Sadece her ikisini de denedim ve benim için çalışmıyor gibi görünüyor) – silkAdmin

+0

Sadece bir dizeyi geçmek istiyorsanız JSON kullanmanız gerekmez. JSON kullanmanı önerdim çünkü daha fazlasını yapmak isteyebilirsiniz. Verileri silmek için PhantomJS kullanıyorsanız çok şey paylaşmak isteyebilirsiniz. – 3on

+0

tamam tekrar teşekkürler, gerçekten işe yaradı, ne beni şaşırtmıştı tarayıcı tarafında bir araya geliyor, ben konsolidasyonu sadece bilgi vermek için bir yol bulmayı bekledim. – silkAdmin

0

phantomjs yerine çok daha basit bir yol (seçeneğiniz varsa) phantom NPM modülünü kullanmaktır. Bu, ayrı komut dosyalarını korumak yerine tarayıcıya doğrudan nodejs içinde erişmenizi sağlar.

İlgili konular