Javascript 奇怪的node.js错误:TypeError:Object#<;对象>;没有方法';在';

Javascript 奇怪的node.js错误:TypeError:Object#<;对象>;没有方法';在';,javascript,node.js,screen-scraping,connect,Javascript,Node.js,Screen Scraping,Connect,我正试图在node.js中运行一个简单的屏幕抓取应用程序。代码发布在这里: 服务器启动正常,但当我对其运行查询时,会出现以下错误。有人知道为什么吗 TypeError: Object #<Object> has no method 'on' at Object.<anonymous> (/Users/avishai/Downloads/anismiles-jsdom-based-screen-scraper-f0c79d3/searcher-server.js:

我正试图在node.js中运行一个简单的屏幕抓取应用程序。代码发布在这里:

服务器启动正常,但当我对其运行查询时,会出现以下错误。有人知道为什么吗

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)
TypeError:对象#没有方法“on”
反对。(/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)
通过时(/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
在Object.router[作为句柄](/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:168:6)
下一步(/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/index.js:218:15)
位于Server.handle(/Users/avishai/.node_libraries/.npm/connect/0.5.10/package/lib/connect/index.js:231:3)
在Server.emit(events.js:45:17)
在HTTPParser.onIncoming(http.js:1078:12)
在HTTPParser.onHeadersComplete(http.js:87:31)
似乎引发错误的函数是:

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

    });
}
功能手册(应用程序){
app.get('/:query',函数(req,res,next){
res.writeHead(200,{'Content-Type':'text/html'});
var rediff=需要(“./搜索者rediff”);
在('on_book',函数(项)上重新定义{
res.write(项+“
”); }); 在('completed',function()上重新定义{ res.end(); }); 搜索(转义(请求参数查询)); }); }
更新

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

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)
SyntaxError:意外的严格模式保留字
编译(Module.js:369:25)
at Object..js(module.js:380:10)
在Module.load(Module.js:306:31)
at功能。加载(模块js:272:10)
根据需要(模块js:318:19)
反对。(/Users/avishai/Downloads/anismiles-jsdom-based-screen-scraper-f0c79d3/searcher.js:2:15)
在模块处编译(Module.js:374:26)
at Object..js(module.js:380:10)
在Module.load(Module.js:306:31)
at功能。加载(模块js:272:10)

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

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

require(“./searcher-rediff”)searcher-rediff
模块中实际上有一个对象就是您正在寻找的EventEmitter

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

最后,你可能会得到像

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

此错误背后的根本原因应该与
eventemitter
有关。请允许我解释一下

  • searcher.js
    继承自
    EventEmitter
    (第26行)
    Searcher.prototype=newprocess.EventEmitter

  • searcher rediff.js
    searcher flipkart.js
    searcher landmarkonthenet.js
    扩展自
    searcher.js
    ,因此它们也继承自
    EventEmitter

  • “on”方法实际上是在
    EventEmitter
    中定义的


  • 因此,我认为,出于某种原因,
    searcher.js
    无法从
    EventEmitter
    继承,因此缺少方法“on”。

    我明白了。。。那么,如何使searcher.js能够从EventEmitter继承呢?