快速路由处理程序上下文是全局的(node.js)

时间:2014-11-18 15:30:04

标签: node.js express routes this

路由处理程序上下文是全局的?这使得几乎不可能传递类的实例方法,或者我在这里错了吗?

例如:

App.all('/anyRoute', instanciatedClass.REST);

.REST是该实例的方法。 如果调用此路由,我只想在该类实例上调用另一个方法,但它不可用,因为函数中的 this 似乎是节点应用程序的全局上下文。

任何想法? 在调用函数的express中没有找到任何apply / call。

1 个答案:

答案 0 :(得分:1)

那是因为你只是传递了这个功能。一旦你这样做,上下文就消失了。

至少有两种解决方案:

  1. 创建包装函数:

    App.all('/anyRoute', function(req, res, next) {
      instanciatedClass.REST(req, res, next);
    });
    
  2. 使用function.bind()将所需的上下文绑定到函数:

    App.all('/anyRoute', instanciatedClass.REST.bind(instanciatedClass));
    
  3. 在不相关的说明中,您可能会考虑执行App.use()而不是App.all(),因为后者将为每个支持的HTTP方法添加单独的路由处理程序,而前者只会添加一个路由处理程序仍然抓住了一切。