如何在expressjs中重定向后执行回调函数

5

我正在使用以下方法重定向到一个页面:

res.redirect('/pageOne');

所以在重定向之后,我想要调用一个函数,但是当我调用这个函数时……
 res.redirect('/pageOne');
 callBack();

我发现回调在重定向之前执行,有没有办法将回调传递给重定向?根据API,似乎无法这样做。是否有其他解决方法?
1个回答

8
根据当前实现,无法将回调传递到redirect方法中。但是,由于响应对象res继承自Node的原生ServerResponse,而后者又是一个Writable,因此您可以监听相关事件。例如,您可以尝试使用finish事件:

事件:'finish'

当调用end()且没有更多块可写入时,会触发此事件。

因此,例如,

res.on('finish', callback);
res.redirect('/pageOne');

我希望(我猜这就是问题的精神)回调函数会在以下页面完成处理重定向调用后执行,但事实并非如此:事件在几毫秒后触发。想一想,我认为通常很难以一般方式处理这种情况(重定向可能会到完全不同的服务器)。尽管如此,如果重定向是到同一服务器应用程序上的页面,则我仍然想知道基于Express的解决方案。 - Marco Faustinelli
1
@Muzietto 你是什么意思?在新的URL完成渲染之后调用回调函数?加载?是的,这将更加困难,需要应用级别的代码。redirect实际上只是在响应中发送的特殊头部,然后响应结束并刷新。 - Michelle Tilley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接