[英]Node.js hapi error after upgrading: TypeError: Uncaught error: Object [object Object] has no method 'reply'
[英]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
。 请允许我解释一下,
searcher.js
继承自EventEmitter
(Line-26) Searcher.prototype = new process.EventEmitter
;
searcher-rediff.js
、 searcher-flipkart.js
和searcher-landmarkonthenet.js
继承自searcher.js
,因此它们也继承自EventEmitter
。
'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.