Node.js:res.send 上的 signedUrl 字符串在生产中返回 {}

问题描述

我正在尝试构建一个托管在 PaaS 服务 Digital Ocean App Platform 上的小型 Node.js API。 API 非常简单:只有一个我知道的可访问的路由。但是,我在这条路线中所做的仅适用于处于开发模式的机器。当我部署它时,它不再像我想要的那样工作。

有关更多上下文,此路由采用字符串路径并将签名 URL 返回到我的 Cloudfront 实例。我正在使用 aws-cloudfront-sign 库,我尝试返回的是在调用 cfsign.getSignedUrl 后直接返回的签名 URL。在开发和我的机器上,我确实收到了一个有效的 URL。但是在部署和生产中,我只在访问 URL 后收到 {}

我通过快速调用 res.send() 验证了 signingParams 已正确实例化并正确包含我的私钥。 imagePath 参数相同。

路线如下:

"use strict";

// Thanks to: https://aws.amazon.com/fr/blogs/developer/creating-amazon-cloudfront-signed-urls-in-node-js/
// And also: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-canned-policy.html#private-content-canned-policy-creating-signature
const express = require("express");
const router = express.Router();
const cfsign = require('aws-cloudfront-sign');

const twoMinutes = 2*60*1000;

let key = ""
if (process.env.NODE_ENV == 'development') {
  key = 'localOnlyKey';
} else if (process.env.NODE_ENV == 'production') {
  key = process.env.CLOUDFRONT_API_SECRET;
}

/*
  Convert an image path to a full-fledged Cloudfront URL
*/
router.get("/:imagePath",(req,res,next) => {
  const expirationTime = Date.Now() + twoMinutes;

  const signingParams = {
    keypairId: 'K34YSMTSIK8T2F',privateKeyString: key,expireTime: expirationTime
  };
  
  const imagePath = req.params.imagePath;

  // Generating a signed URL
  const signedUrl = cfsign.getSignedUrl(
      `https://d3dzfh5brk23pn.cloudfront.net/${req.params.imagePath}`,signingParams
  );

  res.send(signedUrl);
});

module.exports = router;

什么会导致这条路线只产生一个 {} 响应?

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)