这是我的对象
var Controller = (function () {
var self = this;
self.get = function (req, res) {
res.send({
success: 'you got me'
});
}
return self;
})()
module.exports = Controller;
以下是我试图将参数从另一个文档传递给get函数的方法。
var Controller = require('../Controller.js');
Controller.get(arg1, arg2);
然而,nodejs抛出' TypeError:Controller.get不是函数',我在这里做错了什么?感谢
答案 0 :(得分:4)
该代码存在多个问题,但不会导致您描述的TypeError: Controller.get is not a function
。
您调用创建Controller
的匿名函数的方式意味着其中的this
将是全局对象(松散模式)或undefined
(严格模式)。让我们假设是松散模式,因为您没有说过您将get
分配给undefined
时出错。这意味着您正在创建名为get
的全局功能。这也意味着Controller
返回全局对象。
这些都不是好事。 : - )
如果您想要导出具有get
功能的对象,您不需要做任何近乎复杂的事情:
var Controller = {
get: function (req, res) {
res.send({
success: 'you got me'
});
}
};
module.exports = Controller;
或者
function get() {
res.send({
success: 'you got me'
});
}
module.exports = { get: get };
由于这是在NodeJS模块的上下文中,因此没有定义全局函数(模块在私有范围内调用)。
或,如果您认为Controller
是构造函数,则需要通过new
调用它并稍微重新组织:< / p>
function Controller() {
var self = this; // If you need it for something, you don't in your example
self.get = function get() {
res.send({
success: 'you got me'
});
};
}
module.exports = Controller;
然后通过new
:
var Controller = require('./.Controller.js');
var c = new Controller();
c.get("foo", "bar");
它也可能值得指出require('../Controller.js')
使用父目录中的Controller.js
文件,而不是当前目录。如果您没有故意,并且因为您收到了错误的文件而导致TypeError: Controller.get is not a function
获得了{。}}。