2016-09-23 57 views
1

更新::问题已解决,我可以专门将其隔离到我的JavaScript文件。PhantomJS错误:TypeError:undefined不是一个构造函数(评估'require('system')。create()')

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

我的问题是提交一个URL时,出现以下错误弹出:

TypeError: undefined is not a constructor (evaluating 'require('system').create()') 
    phantomjs://code/cap_screen.js:10 in global 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 

在我的cap_screen.js文件中,我的IDE给了我一个警告“未解析变量或类型幻像”。

想法?

回答

1

对于谁曾问题TypeError: undefined is not a constructor,我的问题的人,我不小心有行:

var system = require('system').create();

当它应该是

var system = require('system')

0

如果是在规范文件,确保您在提供程序类中具有函数create()(在下面的示例中,MockService需要该函数)。

{ 
provide: .....Service, 
useClass: MockService 
} 

export class MockService { 
create() { 
// your code for test 
} 
constructor() { } 
} 
相关问题