Странная ошибка node.js: Ошибка типа: У объекта # <Object>нет метода 'on' - PullRequest
5 голосов
/ 03 марта 2011

Я пытаюсь запустить простое приложение для очистки экрана в 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 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)

Ответы [ 3 ]

2 голосов
/ 04 марта 2011

Единственное объяснение, которое приходит на ум, - это то, что требуемый модуль не является экземпляром EventEmmiter. Следовательно, у него нет метода on.

1 голос
/ 05 марта 2011

Основная причина этой ошибки должна быть связана с EventEmittter. позвольте мне объяснить,

  1. searcher.js наследуется от EventEmitter (Строка-26) Searcher.prototype = new process.EventEmitter;

  2. searcher-rediff.js, searcher-flipkart.js и searcher-landmarkonthenet.js простираются от searcher.js, поэтому они также наследуются от EventEmitter.

  3. метод on включен в EventEmitter.

Так что, я думаю, по какой-то причине Searcher.js не может наследовать от EventEmitter, и поэтому метод «on» отсутствует.

0 голосов
/ 04 марта 2011

Вы пытаетесь настроить прослушиватель на модуле вместо EventEmitter.

require('./searcher-rediff'); возвращает модуль Javascript.Я предполагаю, что на самом деле в модуле searcher-rediff есть объект, который является искомым EventEmitter.

Просмотрите код searcher-rediff.js, чтобы увидеть, где определен и экспортирован EventEmitter, тогда вам понадобитсячтобы сослаться на это.

В конце концов вы, вероятно, получите что-то вроде ...

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