2017-03-23 15 views
5

Próbuję wygenerować plik pdf z dynamicznej strony przeglądarki, która wyświetlałaby dane z bazy danych. Gdy tylko uruchomię to na mojej lokalnej maszynie, chciałbym przenieść kod do elastycznej łodygi fasoli. Wydaje się, że kod działa tak, że początkowo wywołuje funkcję odradzania, jednak wywołanie phantomjs nie wydaje się uruchamiać skryptu przekazanego do niego. Aby potwierdzić, dodałem instrukcję console.log na samym początku pliku i nigdy go nie wydrukuję. Nie wspominając o innej instrukcji print w pliku skryptu. Kod znajduje się poniżej:Wywołanie phantomjs z node.js u spawn nie wydaje się wykonywać skryptu

code that performs the spawn: 
var childArgs = [ 
        //'--debug=true', 
        path.join(__dirname, '../phantom/capture.js'), 
        id, 
        filename 
       ]; 

      let child = spawn(phantomjs.path, childArgs, {detached: false}); 

      console.log('set up stderr.....'); 
      child.stderr.on('data', (data) => { 
       console.log('ps stderr: ${data}'); 
      }); 

      console.log('set up stdout.....'); 
      child.stdout.on('data', (data) => { 
       console.log('ps stdout: ${data}'); 
      }); 

      console.log('set up close.....'); 
      child.on('close', (code) => { 
       console.log('this is a test 2.....'); 
       console.log(code); 
       if (code !== 0){ 
        let error = new Error('An error occurred while creating the current report.'); 
        error.status = 500; 
        reject(error); 
       } 

       resolve(fname); 
       return; 
      }); 




capture.js: 
console.log('we are inside....'); 
let os = require('os'); 
var system = require('system'); 
console.log('we are inside.... 1'); 
var page = require('webpage').create(); 
let phantom = require('phantomjs-prebuilt'); 
console.log('we are inside....2'); 
var args = system.args; 
console.log('we are inside....3'); 

if (args.length === 1) { 
    phantom.exit(0); 
} else { 
    page.viewportSize = { width: 2000, height: 800 }; 
//page.paperSize = { format: 'Letter', orientation: 'landscape', margin: '1cm' }; 
page.paperSize = { width: '1280px', height: '800px', margin: '0px' }; 
page.settings.localToRemoteUrlAccessEnabled = true; 
page.settings.loadImages = true; 
page.settings.javascriptEnabled = true; 

let done = false; 
//"http://example.com/order/" + args[1] + '?token=' + args[2] 
page.open("http://example.com/order/" + args[1], function start(status) { 
    if (status === "success"){ 
     page.render(os.tmpdir() + '/' + args[2], { format: 'pdf' }); 
    } 

    done = true; 
}); 

var intervalId = setInterval(function(){ 
    if (done){ 
     phantom.exit(); 
    } 
}, 100); 
} 

Brakuje mi możliwości rozwiązania problemu. Pierwsza linia pliku capture.js nie wydaje się być wywoływana. 1) Jaki jest problem, którego mi brakuje? 2) Jak mogę to naprawić?

Odpowiedz

0

Problem może polegać na tym, że PhantomJS nie może uruchomić pliku capture.js ze ścieżką z kropkami ze względów bezpieczeństwa. Spróbuj uruchomić plik capture.js z bieżącego katalogu, na przykład.

Powiązane problemy