ReferenceError:用SpookyJS找不到variables

我尝试在SpookyJS中调用外部函数,方法与在wiki中执行相同的操作: https : //github.com/WaterfallEngineering/SpookyJS/wiki/Introduction

但是,当我尝试下面的代码,我有这个错误:

ReferenceError:找不到variables:test

try { var Spooky = require('spooky'); } catch (e) { var Spooky = require('../lib/spooky'); } var urls = ["http://www.google.fr", "http://www.yahoo.com" ]; exports.clicker = function(req, res) { console.log("FIRST: " + visitUrl + " \n\n\n END FIRST"); var visitUrl = function(urlIndex, nbClicked) { console.log("HELLO"); }; var spooky = new Spooky( { child: { // transport: 'http' }, casper: { logLevel: 'debug', verbose: true } }, function (err) { if (err) { e = new Error('Failed to initialize SpookyJS'); e.details = err; throw e; } spooky.start(urls[0]); console.log("SECOND: " + visitUrl + " \n\n\n END SECOND"); spooky.then([{ test: visitUrl }, function(){ console.log("THIRD: " + test + " \n\n\n END THIRD"); }]); spooky.run(); }); // Uncomment this block to see all of the things Casper has to say. // There are a lot. // He has opinions. spooky.on('console', function (line) { console.log(line); }); spooky.on('hello', function (greeting) { console.log(greeting); }); spooky.on('log', function (log) { if (log.space === 'remote') { console.log(log.message.replace(/ \- .*/, '')); } }); } 

以下两个日志工作:

 console.log("FIRST: " + visitUrl + " \n\n\n END FIRST"); console.log("SECOND: " + visitUrl + " \n\n\n END SECOND"); 

但第三个是负责的错误消息:

 console.log("THIRD: " + test + " \n\n\n END THIRD"); 

任何build议?

我想对你的post发表评论,而不是一个很大的答案,但我没有这个名声,嗯。

灰化中不能传递函数。 如果你这样做

 var x = 'HELLO' spooky.then([{ XinCasper : x }, function(){ //do something with XinCasper }]) 

这将工作。 如果您想传递一个对象或数组,请使用JSON.stringify并在casper作用域中重新生成。

如果您想从casper作用域访问幽灵函数,请使用事件发射器,如下所示(主要参见最后几行):

 try { var Spooky = require('spooky'); } catch (e) { var Spooky = require('../lib/spooky'); } var urls = ["http://www.google.fr", "http://www.yahoo.com" ]; exports.clicker = function(req, res) { console.log("FIRST: " + visitUrl + " \n\n\n END FIRST"); var visitUrl = function(urlIndex, nbClicked) { console.log("HELLO"); }; var spooky = new Spooky( { child: { // transport: 'http' }, casper: { logLevel: 'debug', verbose: true } }, function (err) { if (err) { e = new Error('Failed to initialize SpookyJS'); e.details = err; throw e; } spooky.start(urls[0]); console.log("SECOND: " + visitUrl + " \n\n\n END SECOND"); spooky.then(function(){ //casper scope var y = 'something' this.emit('third', y) }); spooky.run(); }); spooky.on('third', function(y){ console.log('Hey, I can output ' + y + ' here.') } 

最后,我成功地通过使用PhantomJS节点而不是SpookyJS来做我所需要的。

显然,你正在使用variablestest

 console.log("THIRD: " + test + " \n\n\n END THIRD"); 

没有先申报。

 var test; 

也许用reqreplace它。 🙂