路由处理程序上下文是全局的?这使得几乎不可能传递类的实例方法,或者我在这里错了吗?
例如:
App.all('/anyRoute', instanciatedClass.REST);
.REST是该实例的方法。 如果调用此路由,我只想在该类实例上调用另一个方法,但它不可用,因为函数中的 this 似乎是节点应用程序的全局上下文。
任何想法? 在调用函数的express中没有找到任何apply / call。
答案 0 :(得分:1)
那是因为你只是传递了这个功能。一旦你这样做,上下文就消失了。
至少有两种解决方案:
创建包装函数:
App.all('/anyRoute', function(req, res, next) {
instanciatedClass.REST(req, res, next);
});
使用function.bind()
将所需的上下文绑定到函数:
App.all('/anyRoute', instanciatedClass.REST.bind(instanciatedClass));
在不相关的说明中,您可能会考虑执行App.use()
而不是App.all()
,因为后者将为每个支持的HTTP方法添加单独的路由处理程序,而前者只会添加一个路由处理程序仍然抓住了一切。