如何解决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 举报,一经查实,本站将立刻删除。