Express Static和setHeaders:“错误:发送后无法设置标头。”

我收到错误Error: Can't set headers after they are sent. 用下面的代码。

 app.use('/assets/u', express.static('./public/img/u', { setHeaders: (res, path, stat) => { redis.get(`image-mime:1`, (err, reply) => { if (err) console.log(err); res.set('Content-Type', reply); }); }, })); 

我认为这与callback有关。 因为它以下列方式删除callback:

 app.use('/assets/u', express.static('./public/img/u', { setHeaders: (res, path, stat) => { res.set('Content-Type', 'image/png'); }, })); 

一切工作就像它应该和我没有任何错误。 会喜欢这个问题的一些帮助。

编辑:当我打开Chrome devtools的“禁用caching”,错误消失。 而当我把它关掉的时候 ,错误又回来了。

这是因为setHeaders()需要同步运行。 解决scheme是颠倒电话:

 app.use('/assets/u', (res, res, next) => { redis.get(`image-mime:1`, (err, reply) => { if (err) return next(err); res.set('Content-Type', reply); next(); }); }, express.static('./public/img/u'));