问题描述
我正在尝试构建一个托管在 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 (将#修改为@)