覆盖快速路由处理程序

时间:2016-04-09 12:05:55

标签: node.js express

我试图重新定义快速路线处理程序

我有类似

的东西
var x = {
    handle: function(req, res){
        res.send("first");
    }
}
app.post("/handle", x.handle);

setTimeout(function(){
    x.handle = function(req, res){
        res.send("second");
    }
}, 2000)

但这并没有改变路由处理请求的方式。 我怎样才能实现这样的目标呢?

2 个答案:

答案 0 :(得分:0)

为什么它不起作用

当您将x.handle传递给方法时,作为回调,您根本没有传递对x的引用。你只是绕过handle

稍后,当您更改x.handle时,您正在按预期更改handle x方法。但是,之前对x.handle作为post方法参数的引用没有改变,因为对post的调用对x一无所知。它只知道你传入的handle方法。

如何解决

有很多方法可以解决这个问题,具体取决于你真正想要处理的事情。

如果你只是需要超时,那么这样的事情就可以了:


var count = 1;
app.post("/handle", function(req, res){

  if (count === 1){
    setTimeout(function(){
      count += 1;
    }, 2000);
    // do the first thing here
  } else {
    // do the second thing here
  }  

});

如果您不需要超时,则可以增加count

再一次,有很多方法可以做到这一点......但是你必须在路由处理函数内直接包含决定做哪一个的逻辑。

答案 1 :(得分:0)

最简单的解决方法是确保x.handle 始终检索。在您的方法中,函数引用被检索一次,当您附加它时,但是当您将引用设置为指向另一个函数时,后处理程序仍然指向旧的。

随后附上

app.post("/handle", (req, res) => x.handle(req, res) );

此方法始终向x询问handle方法的当前值,您可以自由地将其重新附加到您想要的任何内容。

相关问题