PhantomJS Fehler: TypeError: undefined ist kein Konstruktor (Evaluierung erforderlich ist ("system").create () -')
UPDATE:: PROBLEM GELÖST, ICH WAR IN DER LAGE, ES ZU ISOLIEREN, SPEZIELL, UM MEINE JAVASCRIPT-DATEI.
cap_screen.js
var page = require('webpage').create(); //Create a new instance of a web page
var system = require('system').create(); //Our script needs to require Phantom's Web Page module
page.onError = function(msg, trace) { //Our script needs to require Phantom's Web Page module
var msgStack = ['ERROR: ' + msg];
if (trace && trace.length) {
msg.push('TRACE:');
trace.forEach(function(t) {
msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : ''));
});
}
console.error(msgStack.join('\n'));
};
//Now write core of screen cap script
//Remember: system.args[1] = "http://wwww.clowder.com" system.args[2] = "clowder-pic.png"
page.open(system.args[1], function(status) {
console.log('Status: ' + status);
page.render(system.args[2]); //this line captures the screen
phantom.exit();
});
Mein problem ist, wenn die Einreichung einer URL, die folgende Fehlermeldung erscheint:
TypeError: undefined is not a constructor (evaluating 'require('system').create()')
phantomjs://code/cap_screen.js:10 in global code
Dies ist mein code:
entries_controller
def create
@entry = Entry.new(entry_params)
@entry.image = cap_screen
if @entry.save
redirect_to root_path
else
render('index')
end
end
private
PATH_TO_PHANTOM_SCRIPT = Rails.root.join('app', 'assets', 'javascripts', 'cap_screen.js')
def cap_screen
Dir.chdir(Rails.root.join('public', 'images'))
system "phantomjs #{PATH_TO_PHANTOM_SCRIPT} #{params['entry_url']} # {params['entry_url']}.png"
end
def entry_params
params.require(:entry).permit(:title, :url)
end
In meinem cap_screen.js Datei, meine IDE gibt mir die Warnung "nicht aufgelöste variable oder Typ phantom".
Gedanken?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für Menschen, die Probleme mit
TypeError: undefined is not a constructor
für mein problem, ich hatte ausversehen die Zeile:var system = require('system').create();
Wenn es gewesen sein sollte,
var system = require('system')
Wenn es in der Spec-Datei, Stellen Sie sicher, dass die Funktion create() in der provider-Klasse(Im Beispiel unten MockService muss die Funktion).
Ich hatte diesen gleichen Fehler, aber für eine andere string-Funktion.
Mein fix war zu add ".toString()" zwischen den Variablen und die ".ersetzen" - Methode nennen. Ich habe meinen code unten für weitere Referenz.