原型模式创build新的属性
我试图分享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; };
而当我打电话route this.io
属性返回undefined
任何人都知道什么是问题?
这里的问题是对JavaScript范围如何工作的一个误解。 当router
调用messageController.sendMessageAction
它使用绑定。 例如:
callback(res, req, next)
在这种情况下,当前作用域不是 messageController
。 所以this
不是指messageController
。 如果你想要绑定到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) )
- NodeJS会话(或不共享用户之间的值)
- Nodejs套接字挂断&ECONNRESET – 从meteor到Node js服务器的HTTP post请求
- 如何testing包含asynchronous函数的nodejs导出
- Node / Express / Request – 尝试使用参数代理POST请求抛出“Write after end”
- Nodejs:如何为要下载的文件设置假path
- Expressjs重新路由
- 节点中持久的cookies
- 我在哪里可以在WebStorm 8生成的node.js + Expres + Jade + Stylus项目中添加NIB?
- 如何在expressjs 4.0中设置marko模板引擎