未调用节点 js 中的 AWS textract 方法
AWS textract methods in node js are not getting invoked
我想使用节点 js 从图像中提取文本,因此在 aws 中创建了一个 lambda。请找到下面的代码片段。问题是没有调用 textract 方法 detectDocumentText。
就权限而言,我已授予 s3 完全访问权限和 textract 对 lambda 的完全访问权限。我错过了什么吗?
var AWS = require("aws-sdk");
var base64 = require("base-64");
var fs = require("fs");
exports.handler = async (event, context, callback) => {
// Input for textract can be byte array or S3 object
AWS.config.region = "us-east-1";
//AWS.config.update({ region: 'us-east-1' });
var textract = new AWS.Textract({ apiVersion: "2018-06-27" });
//var textract = new AWS.Textract();
console.log(textract);
var params = {
Document: {
/* required */
//'Bytes': imageBase64
S3Object: {
Bucket: "717577",
Name: "Picture2.png"
}
}
};
textract.detectDocumentText(params, function(err, data) {
if (err) {
console.log(err); // an error occurred
} else {
console.log(data); // successful response
callback(null, data);
}
});
};
而且我在 cloudwatch 日志中没有看到任何错误日志。
问题是您已将您的方法标记为 async
,这意味着您正在返回一个承诺。在您的情况下,您没有返回承诺,因此对于 lambda 没有办法完成该方法的执行。这里有两个选择
- 删除
async
- 或者更推荐的方法是将回调样式转换为使用 promise。
aws-sdk
支持所有方法的 .promise
方法,因此您可以利用它。代码将如下所示
var AWS = require("aws-sdk");
var base64 = require("base-64");
var fs = require("fs");
exports.handler = async (event, context) => {
// Input for textract can be byte array or S3 object
AWS.config.region = "us-east-1";
//AWS.config.update({ region: 'us-east-1' });
var textract = new AWS.Textract({ apiVersion: "2018-06-27" });
//var textract = new AWS.Textract();
console.log(textract);
var params = {
Document: {
/* required */
//'Bytes': imageBase64
S3Object: {
Bucket: "717577",
Name: "Picture2.png"
}
}
};
const data = await textract.detectDocumentText(params).promise();
return data;
};
希望对您有所帮助。
我想使用节点 js 从图像中提取文本,因此在 aws 中创建了一个 lambda。请找到下面的代码片段。问题是没有调用 textract 方法 detectDocumentText。
就权限而言,我已授予 s3 完全访问权限和 textract 对 lambda 的完全访问权限。我错过了什么吗?
var AWS = require("aws-sdk");
var base64 = require("base-64");
var fs = require("fs");
exports.handler = async (event, context, callback) => {
// Input for textract can be byte array or S3 object
AWS.config.region = "us-east-1";
//AWS.config.update({ region: 'us-east-1' });
var textract = new AWS.Textract({ apiVersion: "2018-06-27" });
//var textract = new AWS.Textract();
console.log(textract);
var params = {
Document: {
/* required */
//'Bytes': imageBase64
S3Object: {
Bucket: "717577",
Name: "Picture2.png"
}
}
};
textract.detectDocumentText(params, function(err, data) {
if (err) {
console.log(err); // an error occurred
} else {
console.log(data); // successful response
callback(null, data);
}
});
};
而且我在 cloudwatch 日志中没有看到任何错误日志。
问题是您已将您的方法标记为 async
,这意味着您正在返回一个承诺。在您的情况下,您没有返回承诺,因此对于 lambda 没有办法完成该方法的执行。这里有两个选择
- 删除
async
- 或者更推荐的方法是将回调样式转换为使用 promise。
aws-sdk
支持所有方法的.promise
方法,因此您可以利用它。代码将如下所示
var AWS = require("aws-sdk");
var base64 = require("base-64");
var fs = require("fs");
exports.handler = async (event, context) => {
// Input for textract can be byte array or S3 object
AWS.config.region = "us-east-1";
//AWS.config.update({ region: 'us-east-1' });
var textract = new AWS.Textract({ apiVersion: "2018-06-27" });
//var textract = new AWS.Textract();
console.log(textract);
var params = {
Document: {
/* required */
//'Bytes': imageBase64
S3Object: {
Bucket: "717577",
Name: "Picture2.png"
}
}
};
const data = await textract.detectDocumentText(params).promise();
return data;
};
希望对您有所帮助。