Node.js NodeJS Lambda调用错误:无法字符串化响应正文
创建了一个Lambda函数以从AWS Textract API获取分析。以下是相关代码(Node.js 12) 在CloudWatch日志中,获取以下错误:Node.js NodeJS Lambda调用错误:无法字符串化响应正文,node.js,aws-lambda,callback,Node.js,Aws Lambda,Callback,创建了一个Lambda函数以从AWS Textract API获取分析。以下是相关代码(Node.js 12) 在CloudWatch日志中,获取以下错误: ERROR Invoke Error { "errorType": "Error", "errorMessage": "Unable to stringify response body", "stack"
ERROR Invoke Error
{
"errorType": "Error",
"errorMessage": "Unable to stringify response body",
"stack": [
"Error: Unable to stringify response body",
" at _trySerializeResponse (/var/runtime/RAPIDClient.js:175:11)",
" at RAPIDClient.postInvocationResponse (/var/runtime/RAPIDClient.js:45:22)",
" at complete (/var/runtime/CallbackContext.js:33:12)",
" at callback (/var/runtime/CallbackContext.js:43:7)",
" at /var/runtime/CallbackContext.js:104:16",
" at Runtime.exports.handler (/var/task/index.js:92:5)",
" at Runtime.handleOnce (/var/runtime/Runtime.js:66:25)"
]
}
修改回调时:回调(null,request.X)。。。lambda从Textract返回数据对象。起初我认为我必须深入到数据对象(request.DocumentMetadata)。。。但是可以处理我在“request”前面输入的任何字符串(至少是我尝试过的那些)。非常感谢您的帮助。我之所以使用上述方法,是因为我密切关注AWS SDK API文档。然而,我发现了另一种方法,它解决了所有问题(很多)。也许有人能解释原因 这是解决办法
let results = await textract.getDocumentAnalysis(params, (err, data) => {
if(err) console.log(err, err.stack);
else console.log(data);
}).promise();
callback(null, results);
答案与aws skd(适用于js)有关。以下是网址:
对于任何异步请求(认为所有或大部分AWS api请求都是异步的),您需要一个承诺……然后。有了AWS的要求,你需要一个“有能力”的承诺。。。因此,在请求的末尾添加:promise()
直接从AWS文档中可以看出,这可能有点神秘,我认为:
var request = s3.putObject({Bucket: 'bucket', Key: 'key'});
var result = request.promise();
result.then(function(data) { ... }, function(error) { ... });
如果我这样写上面的话:
async function(){
const params = {Bucket: 'bucket', Key: 'key'};
await s3.putObject(params, (err, data) => {
if (err) function(err){ ... };
else function(data) { ... };
}).promise();
};
对AWS SDK上的函数的调用,例如,我在使用AWS。Rekognion总是希望得到承诺。@Mark。就连我也面临着同样的问题。我正在从Aurora DB中获取如下数据:
const data=await rdsDataService.executeStatement(params,(err,res)=>{if(err)console.log(err.stack);else console.log(res)}.promise();回调(空,数据)
。但是它开始给出错误4fdb13任务在6.01秒后超时“
。如果我删除了promise(),那么它也没有任何区别。超时错误仍然存在。您能帮忙吗?
async function(){
const params = {Bucket: 'bucket', Key: 'key'};
await s3.putObject(params, (err, data) => {
if (err) function(err){ ... };
else function(data) { ... };
}).promise();
};