我的目标是从Google存储空间检索文件,然后通过响应将其发送回去。问题是,当我第一次启动此功能时,它会因Error [ERR_STREAM_WRITE_AFTER_END]: write after end
而崩溃。下次处决可以正常工作。
exports = module.exports = region(defaultRegion).https.onRequest(async (req, res): Promise<void> => {
const [authError] = await to(handleAuth(req, res));
if (authError) {
res.status(500).send(authError.message);
return;
}
const { assetId, contentType, path } = req.query;
const file = bloqifyStorage.bucket().file(`assets/${assetId}/${path}`);
const fileExists = (await file.exists())[0];
if (!fileExists) {
res.status(404).send(`${path} was not found`);
return;
}
const fileStream = file.createReadStream();
fileStream.pipe(res).on('end', (): void => {
res.setHeader('content-type', contentType);
});
});
我在这里想念什么?
编辑:删除set标头无法解决。例如:
const fileStream = file.createReadStream();
// res.setHeader('content-type', contentType);
fileStream.pipe(res).on('error', (e): void => {
console.log(e);
});
它将显示相同的错误。
答案 0 :(得分:0)
您正在尝试在发送响应后设置标头。您不能这样做-标头必须位于主体之前。在res.setHeader()
之前致电pipe()
。