如何在使用 res.sendFile() 将请求发送回客户端之前等待文件创建完成
Posted
技术标签:
【中文标题】如何在使用 res.sendFile() 将请求发送回客户端之前等待文件创建完成【英文标题】:How to wait for the file to get created before sending request back to client using res.sendFile() 【发布时间】:2021-10-26 05:51:37 【问题描述】:我有一个文件创建器块,它将文件写入磁盘,然后将文件发送到客户端。
但响应是在文件写入之前发送的。
carbone.render("./template.odt", data, options, (err, ress) =>
if (err)
return console.log(err);
var paths = `./static/reports/report-$timestamp.pdf`;
fs.writeFileSync(paths, ress);
process.exit();
);
res.sendFile(
path.join(__dirname, "..", "static", "reports", `report-$timestamp.pdf`)
);
解决方案是什么让sendFile等待文件被写入然后获取它?
【问题讨论】:
您正在使用writeFileSync()
,这意味着在该调用之后写入成功。你可以在它之后返回它
我已经尝试在writeFileSync
之后添加响应,但它仍然不发送文件服务器发送Error: socket hang up
【参考方案1】:
这就是回调函数的用途。 carbone.render 渲染模板,完成后将结果返回给回调函数。 JS 在移动到 res.sendFile 之前不会等待 carbone.render 完成。您可以在回调函数中移动发送部分。
【讨论】:
删除 process.exit() 并在 writeFileSync 行工作后将其添加到渲染函数中。【参考方案2】:你需要将sendFile代码添加到carbone.render的回调函数中,否则你可以参考this问题。
【讨论】:
以上是关于如何在使用 res.sendFile() 将请求发送回客户端之前等待文件创建完成的主要内容,如果未能解决你的问题,请参考以下文章
express:如何使用 sendFile 将 html 和 css 一起发送?
Angularjs - TypeError:路径必须是绝对路径或指定根到 res.sendFile
无法准确解读错误:TypeError:路径必须是绝对路径或在 ServerResponse.sendFile 处指定 res.sendFile 的根