簡體   English   中英

奇怪的 node.js 錯誤:TypeError: Object #<Object> 沒有方法“開”

[英]Strange node.js error: 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 -網站/

服務器啟動正常,但是當我對其運行查詢時,出現以下錯誤。 有誰知道這是為什么?

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

    });
}

更新

現在我注意到在第一個請求中,我得到了這個:

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)

想到的唯一解釋是所需的模塊不是 EventEmmiter 實例。 因此,它沒有“on”方法。

此錯誤背后的根本原因應該與EventEmittter 請允許我解釋一下,

  1. searcher.js繼承自EventEmitter (Line-26) Searcher.prototype = new process.EventEmitter

  2. searcher-rediff.jssearcher-flipkart.jssearcher-landmarkonthenet.js繼承自searcher.js ,因此它們也繼承自EventEmitter

  3. 'on' 方法實際上是在EventEmitter定義的。

因此,我認為,出於某種原因, searcher.js無法從EventEmitter繼承,因此缺少“on”方法。

您正在嘗試在模塊而不是 EventEmitter 上設置偵聽器。

require('./searcher-rediff'); 返回一個 Javascript 模塊。 我想在searcher-rediff模塊中實際上有一個對象是您正在尋找的 EventEmitter。

查看searcher-rediff.js代碼以查看 EventEmitter 的定義和導出位置,然后您需要引用它。

最后你可能會得到類似的東西......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM