我正在尝试与我的财产分享socket.io
,不知道为什么它不起作用......
我的第一个档案MessageController.js
:
function MessageController() {
};
MessageController.prototype.io = "";
MessageController.prototype.sendMessageAction = function (req, res) {
console.log(this.io);
}
module.exports = new MessageController();
在另一个文件router.js
中我喜欢这个:
var messageController = require('./controllers/MessageController');
module.exports = function (expressApp, router, io) {
console.log(io);
messageController.io = io;
router.post('/dashboard/message', messageController.sendMessageAction);
return router;
};
以下是我需要的router.js
:
module.exports = function (expressApp, io) {
var router = system.express.Router();
router = require('./dashboard/router.js')(expressApp, router, io);
return router;
};
当我呼叫路由this.io
属性返回undefined
时,任何人都知道什么是问题?
答案 0 :(得分:1)
这里的问题是对JavaScript的范围如何工作的误解。当router
调用messageController.sendMessageAction
时,它会使用绑定。 e.g:
callback(res, req, next)
在这种情况下,当前范围不是 messageController
。因此this
未提及messageController
。如果您希望this
绑定到messageController
,您必须绑定 sendMessageAction
。
// Using Function#bind
router.post(
'/dashboard/message',
messageController.sendMessageAction.bind(messageController)
)
// Using a closure
router.post(
'/dashboard/message',
(req, res) => messageController.sendMessageAction(req, res)
)