奇怪的node.js错误:TypeError:Object#<Object> has no method'on'

我试图在node.js中运行一个简单的屏幕抓取应用程序。 代码发布在这里: https : //github.com/anismiles/jsdom-based-screen-scraper http://anismiles.wordpress.com/2010/11/29/node-js-and-jquery-to-scrape -websites /

服务器启动正常,但是当我运行一个查询时,我得到以下错误。 有谁知道这是为什么?

TypeError: Object #<Object> has no method 'on' at Object.<anonymous> (/Users/avishai/Downloads/anismiles-jsdom-based-screen-scraper-f0c79d3/searcher-server.js:9:10) at param (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21) at param (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:157:15) at pass (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10) at Object.router [as handle] (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:168:6) at next (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/index.js:218:15) at Server.handle (/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/index.js:231:3) at Server.emit (events.js:45:17) at HTTPParser.onIncoming (http.js:1078:12) at HTTPParser.onHeadersComplete (http.js:87:31) 

似乎是抛出错误的function是:

 function books(app){ app.get('/:query', function(req, res, next) { res.writeHead(200, { 'Content-Type': 'text/html' }); var rediff = require('./searcher-rediff'); rediff.on('on_book', function(item){ res.write(item + "<br/>"); }); rediff.on('completed', function(){ res.end(); }); rediff.search(escape(req.params.query)); }); } 

UPDATE

现在我注意到,在第一个请求,我得到这个:

 SyntaxError: Unexpected strict mode reserved word at Module._compile (module.js:369:25) at Object..js (module.js:380:10) at Module.load (module.js:306:31) at Function._load (module.js:272:10) at require (module.js:318:19) at Object.<anonymous> (/Users/avishai/Downloads/anismiles-jsdom-based-screen-scraper-f0c79d3/searcher.js:2:15) at Module._compile (module.js:374:26) at Object..js (module.js:380:10) at Module.load (module.js:306:31) at Function._load (module.js:272:10) 

这个bug背后的根本原因应该与EventEmittter有关。 让我解释,

  1. searcher.jsinheritance自EventEmitter(Line-26)Searcher.prototype = new process.EventEmitter;

  2. searcher-rediff.js,searcher-flipkart.js和searcher-landmarkonthenet.js从searcher.js扩展,所以它们也从EventEmitterinheritance。

  3. “开”方法实际上是在EventEmitter中定义的。

所以,我认为,由于某种原因,searcher.js不能从EventEmitterinheritance,因此缺less方法'on'。

想到的唯一解释是所需的模块不是一个EventEmmiter实例。 因此,它没有“开”的方法。

您正尝试在模块上设置侦听器,而不是EventEmitter。

require('./searcher-rediff'); 返回一个Javascript模块。 我想在searcher-rediff模块中实际上有一个对象是你正在寻找的EventEmitter。

通过searcher-rediff.js代码查看EventEmitter的定义和导出位置,然后您需要引用该代码。

最后你可能会得到像…

  var rediff = require('./searcher-rediff').searcher;