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'));