我试图重新定义快速路线处理程序
我有类似
的东西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)
但这并没有改变路由处理请求的方式。 我怎样才能实现这样的目标呢?
答案 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
方法的当前值,您可以自由地将其重新附加到您想要的任何内容。