繁体   English   中英

AWS S3 getSignedUrl 循环无法正常工作?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM