【发布时间】:2019-03-04 09:20:31
【问题描述】:
我正在尝试通过构建一个允许用户下载文件的小型应用程序来练习 node。
我已将文件保存在 S3 上,将 url 保存在 mLab 数据库中,并希望将文件下载到应用程序,以便我可以在客户端将 url 用作 href。它目前在某种程度上可以工作,但会下载一个空文件。我认为这是因为它在文件下载之前正在运行下一个then()。
这是我目前拥有的代码:
(async err => {
const charge = await stripe.charges
// create stripe charge
.create({
...
})
// when the payment is successful,
// download the file locally to a 'dist' folder
// so we can use it on the success page
.then(() => {
download(url_to_file, "dist").then(() => {
console.log("done!");
});
})
// then render the success page
.then(
res.render("success", {
fileUrl: ...
})
)
所以在客户端我可以(使用 ejs)做类似的事情:
<a href="<%= /dist/fileUrl %>">Download</a>
我对 promises 很陌生,不知道如何等待下载方法完全完成,然后再运行下一个 then 并呈现成功页面。
此时,方法运行,然后成功页面呈现,然后文件出现在应用程序中。这允许下载文件但文件为空。
谁能指出我正确的方向/解释如何在运行下一个.then() 方法之前等待下载完成?任何帮助将不胜感激!
【问题讨论】:
-
尝试将呼叫返回到
download;例如:.then(() => { return download(url_to_file, "dist").then(() => { console.log("done!"); }); }) -
嗨@ScottRudiger,感谢您的回复。这会正确下载文件,但下载时文件仍然是空的。
标签: javascript node.js express download