[英]AWS S3 getSignedUrl loop not working properly?
我想在我的 Express 路由中为 [user.idKey, user.selfieKey] 数组中的每个键发回两个 S3 预签名 URL。
我知道 S3 已成功获取预签名 URL,因为它们将使用回调console.log(url)登录到控制台。
我还尝试在 getSignedUrl 方法前使用“await”,但我认为这不适用于 S3 ..???
知道我做错了什么吗?
谢谢!
router.get(`/api/verification/load`, auth, async (req, res) => {
try {
const user = await User.findOne({ GETS A USER })
let urlArray = []
const keyArray = [user.idKey, user.selfieKey]
for (const key in keyArray) {
s3VerificationBucket.getSignedUrl(
"getObject",
{
Bucket: "app-verification",
Key: key,
Expires: 30,
},
(err, url) => urlArray.push(url) // when console.log(url) it logs urls
)
}
if (urlArray.length === 0) {
console.log("URL ARRAY EMPTY") -> RETURNS "URL ARRAY EMPTY"
}
const idUrl = urlArray[0]
const selfieUrl = urlArray[1]
res.send({ user, idUrl, selfieUrl })
} catch (err) {
res.status(500).send()
}
})
您正在同步发送响应。 您正在异步签署您的链接。 因此,在您已经响应之后填充数组。
相反,使用s3VerificationBucket.getSignedUrl(...).promise()
为每个操作获取 promise。
使用Promise.all(...)
等待所有操作的结果,然后再响应。
只有在您处理完所有异步工作之后,您才应该res.send(...)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.