gpt4 book ai didi

javascript - 如何捕获在我的调用堆栈之外发生的 aws-sdk 错误?

转载 作者:行者123 更新时间:2023-12-05 06:59:54 28 4
gpt4 key购买 nike

现状

我正在使用 aws-sdk 与 S3 存储桶进行交互。

如果我没有设置正确的凭据,sdk 会适本地提示。但是,它的投诉方法是在我的调用堆栈之外抛出的错误。我希望能够捕获该错误并优雅地处理它。

问题

这是导致问题的一个小脚本。

import { S3 } from 'aws-sdk';
try {
const s3 = new S3();
s3.createPresignedPost({}, (err, data) => {
console.log('sup dog');
});
} catch (err: Error) {
console.log('KABOOM!');
}

我希望这能捕获 s3.createPresignedPost 抛出的任何错误并触发捕获,但实际发生的是 sup dog 被发布,然后 Node 崩溃指向 aws-sdk 的堆栈跟踪。

sup dog
./node_modules/aws-sdk/lib/services/s3.js:1241
throw new Error('Unable to create a POST object policy without a bucket,'
^

Error: Unable to create a POST object policy without a bucket, region, and credentials
at features.constructor.preparePostFields (./node_modules/aws-sdk/lib/services/s3.js:1241:13)
at finalizePost (./node_modules/aws-sdk/lib/services/s3.js:1204:22)
at ./node_modules/aws-sdk/lib/services/s3.js:1221:24
at finish (./node_modules/aws-sdk/lib/config.js:386:7)
at ./node_modules/aws-sdk/lib/config.js:428:9
at Object.<anonymous> (./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:111:13)
at Object.arrayEach (./node_modules/aws-sdk/lib/util.js:516:32)
at resolveNext (./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:110:20)
at ./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js:126:13
at ./node_modules/aws-sdk/lib/credentials.js:124:23
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

问题

这里的解决方案当然是使用凭据正确配置 aws sdk,但我想通过捕获错误并防止硬崩溃来优雅地处理没有发生这种情况的情况。

如何在不冒系统崩溃风险的情况下使用 createPresignedPost 的回调模式?

最佳答案

我已经创建了这个 lambda 请求:

const AWS = require('aws-sdk');

const s3 = new AWS.S3();


exports.handler = async (event, context) => {
//console.log('Received event:', JSON.stringify(event, null, 2));

let body;
let statusCode = '200';
const headers = {
'Content-Type': 'application/json',
};
var params = {
Bucket: 'bucketname',
Fields: {
key: 'example.pdf'
}
};
try {
s3.createPresignedPost(params, (err, data) => {
body = "successfully";
});
} catch (err) {
statusCode = '400';
body = err.message;
} finally {
body = JSON.stringify(body);
}

return {
statusCode,
body,
headers,
};
};

为了测试成功案例,按原样运行代码。用于测试错误注释参数,其中一个键要么是 bucket 要么是 key。它会抛出错误并捕获。

Response:
{
"statusCode": "400",
"body": "\"Unable to create a POST object policy without a bucket, region, and credentials\"",
"headers": {
"Content-Type": "application/json"
}
}

关于javascript - 如何捕获在我的调用堆栈之外发生的 aws-sdk 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64268250/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com