我试图从原型中调用构造函数中的函数但是继续得到以下错误,我不知道我的代码有什么问题。
TypeError: this.authorize is not a function
这是我的代码: controller.js
var Controller = function() {
this.authorize = function(req, res) {
if (!req.user) {
res.redirect("/");
}
};
};
Controller.prototype.online = function(req, res) {
this.authorize(req, res);
res.render('./play/online');
};
var controller = new Controller();
module.exports = controller;
route.js
var router = require('express').Router();
var controller = require('../controller');
router.get('/online', controller.online);
module.exports = router;
如果我在Controller之外放置授权功能,那么我可以调用它,但我不想这样做。 那我该怎么办?
更新
当我应用请求" / online"时,在Nodejs中发生此错误,而不是在纯Javascript中
答案 0 :(得分:1)
传递online
作为回调
router.get('/online', controller.online.bind(controller));
或内部构造函数
var Controller = function() {
this.authorize = function(req) {
console.log(req);
};
this.online = this.online.bind(this);
};
答案 1 :(得分:0)
在Controller的原型上设置授权功能,就像使用在线功能一样。
编辑:我测试了您的代码(不使用Controller.prototype),它对我有用......
我可以在在线功能中调用授权。从在线功能调用授权时是否发生错误,或者是否在其他地方发生?你确定你的代码中没有拼写错误吗?
您是否可以尝试在构造函数中定义在线函数?
//Your initial version: works for me...
var Controller = function() {
this.authorize = function(req) {
console.log(req);
};
};
Controller.prototype.online = function(text) {
this.authorize(text);
};
var controller = new Controller();
controller.online("Some text");
//My prototype version: works as well...
var Controller2 = function() {};
Controller2.prototype.authorize = function(req) {
console.log(req);
};
Controller2.prototype.online = function(text) {
this.authorize(text);
};
var controller2 = new Controller2();
controller2.online("Some text2");