Étrange node.js erreur: TypeError: Object #<Object> n'a pas de méthode "on"
Je suis en train de lancer une simple capture d'écran de l'app dans node.js. Le code est disponible ici:
https://github.com/anismiles/jsdom-based-screen-scraper
http://anismiles.wordpress.com/2010/11/29/node-js-and-jquery-to-scrape-websites/
Le serveur démarre bien, mais alors quand je lance une requête sur elle, j'obtiens l'erreur suivante. Personne ne sait pourquoi c'est?
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)
La fonction qui semble être jeter l'erreur est:
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));
});
}
Mise à JOUR
Maintenant, j'ai remarqué que sur la première demande, je reçois ceci:
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)
OriginalL'auteur Avishai | 2011-03-03
Vous devez vous connecter pour publier un commentaire.
Raison fondamentale derrière ce bug devrait être quelque chose à voir avec EventEmittter. laissez-moi vous expliquer,
searcher.js hérite de EventEmitter
(Ligne 26) Chercheur.prototype = new processus.EventEmitter;
searcher-rediff.js, searcher-flipkart.js et searcher-landmarkonthenet.js s'étendent de searcher.js, de sorte qu'ils héritent de EventEmitter.
‘sur’ méthode est en fait défini dans EventEmitter.
Donc, je pense que, pour une raison quelconque, searcher.js n'est pas possible d'hériter de EventEmitter et donc la méthode " on " est manquant.
OriginalL'auteur Animesh
La seule explication qui vient à l'esprit est que le module n'est pas un EventEmmiter instance. Par conséquent, il ne dispose pas d'un 'on' méthode.
OriginalL'auteur J. K.
Vous essayez de configurer un écouteur sur un module à la place d'un EventEmitter.
require('./searcher-rediff');
retourne un module Javascript. J'imagine qu'il est en fait un objet dans lesearcher-rediff
module qui est la EventEmitter vous êtes à la recherche pour.Regarder à travers la
searcher-rediff.js
code pour voir où une EventEmitter est défini et exportées, alors vous aurez besoin de référence.En fin de compte, vous finirez probablement avec quelque chose comme...
OriginalL'auteur Chris W.