gpt4 book ai didi

javascript - 事件排序 ExpressJS/Node

转载 作者:行者123 更新时间:2023-11-30 06:25:46 24 4
gpt4 key购买 nike

我正在尝试使用事件在简单的 ExpressJS Web 服务器中设置缓存控制 header 。代码看起来像这样:

app.get('*', function (req, res, next) {
helper.setCacheHeader.call(res, SIX_MONTHS);
// If something goes wrong (and we know about it) remove the cache value
res.on('nocache', function () {
helper.setCacheHeader.call(res, 0);
});

next();
});

那是路由器的第一条路线,所以每个非静态文件都会通过它。我在代码中的某些地方可能会出错,我只是发送一个空的 200 并在 res 上发出“nocache”事件。

if (err) {
res.emit('nocache');
return res.send(200, foo_bar)
}

似乎在我触发错误事件时起作用,我的缓存 header 按预期设置为 0。然而,我盯着它看的时间越长,我就越不确定。

是否所有事件处理程序都在之前然后响应结束时解析(res.send)?还是这真的是一种竞争条件,我只是不断走运,所以看起来它在工作?

最佳答案

您的解决方案将有效,因为事件以同步方式发出和接收。通过使用 res.emit('nocache') 触发事件,EventEmitter 调用当前线程中的任何已注册监听器(因为 node.js 是单线程的)。

EventEmitter 不使用 process.nextTick() 调用处理程序,因此所有为 nocache 事件注册的处理程序总是在 res.send() 之前调用。您可以在 node.js source 中查看 EventEmitter 的实现。 .

关于javascript - 事件排序 ExpressJS/Node,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21217871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com