我有以下模块:
var util = require('util');
var events = require('events');
exports.IncomingMessage=IncomingMessage;
var IncomingMessage = function (){
events.EventEmitter.call(this);
this.headers={};
this.httpVersion='';
this.method='';
this.socket='';
this.ready=function(){
console.log('should emit ready');
//this.emit('ready');
}
}
在我的代码中,我正在做:
var req=require('./newIncomingMessage');
然后当我打电话时:
req.ready();
我收到错误:
TypeError : Object #<Object> has no method 'ready'
为什么?我错过了什么?
答案 0 :(得分:1)
你错过了module.exports = ...
来说出你需要的时候会发生什么。如果您希望它导出具有.ready
功能的对象,则仍需要
....
module.exports = { ready: function() { ... } };
说,我看不到你的模块中看起来像一个就绪函数的代码,所以更好的问题是“你要用这个代码做什么”。
相对重要的一点:req
是一个通常为http请求对象保留的var名称(在plain nodejs或connect / express中),所以你要通过使用它来混淆很多其他Node devs作为你的变量名。
答案 1 :(得分:0)
只是在定义之前没有识别IncomingMessage。
var util = require('util');
var events = require('events');
exports.IncomingMessage = new function(){
events.EventEmitter.call(this);
this.headers={};
this.httpVersion='';
this.method='';
this.socket='';
this.ready=function(){
console.log('should emit ready');
//this.emit('ready');
};
};
在使用之前
var iMsg=require('./newIncomingMessage').IncomingMessage;
然后你可以使用它:
iMsg.ready();
关于它的简要说明是:
您可以将新
function(){}
视为{}
,但超过{}
,因为您可以在此封闭范围内执行更多操作。在这个例子中,只是错字
typeof iMsg
你会得到一个
'object'
。
答案 2 :(得分:0)
好吧,我无法从上面的答案中理解为什么这种方法不起作用。但那是我最后用的:
module.exports = IncomingMessage;
function IncomingMessage() {
this.headers={};
this.httpVersion='';
this.method='';
this.socket='';
}
IncomingMessage.prototype.ready=function(){
console.log('Inside ready function');
}