我正在尝试从S3读取txt文件以为Alexa建立响应。在Lambda中测试代码时,出现此错误。谁能看到我要去哪里错了?
错误
const address = {
city: {
type: String,
required: true,
maxlength: 25
}
country: {
type: String,
required: true,
maxlength: 25
}
postalcode: {
type: String,
required: true,
maxlength: 9
}
}
我已经安装了“ aws-sdk”,并在我的技能的index.js顶部需要该模块
Error handled: s3.getObject is not a function
处理程序代码。为了强调这一点,我正在使用Async / Await并在下面的goGetS3函数中返回Promise。
const s3 = require('aws-sdk/clients/s3')
goGetS3()函数代码。我尝试了两个不同的版本,都给了我上面相同的错误。
const ChooseStoryIntentHandler = {
canHandle(handlerInput) {
return handlerInput.requestEnvelope.request.type === 'IntentRequest' &&
handlerInput.requestEnvelope.request.intent.name === 'ChooseStoryIntent';
},
async handle(handlerInput) {
let speechText;
let options = {
"Bucket": "stores",
"Key": "person.txt"
}
await goGetS3(options)
.then((response) => {
console.log(response),
console.log(response.Body.toString()),
speechText = response
})
.catch((err) => {
console.log(err)
speechText = 'something wrong getting the story'
})
return handlerInput.responseBuilder
.speak(speechText)
.reprompt(speechText)
.getResponse();
},
};
我的代码来自以下博客/文章。
####编辑###
根据@ milan-cermak,我将其添加到页面顶部
const goGetS3 = function (options) {
s3.getObject(options, function (err, data) {
//handle error
if (err) {
reject("Error", err);
}
//success
if (data) {
resolve(data.Body.toString())
}
}).promise()
}
// const goGetS3 = function (options) {
// return new Promise((resolve, reject) => {
// s3.getObject(options, function (err, data) {
// //handle error
// if (err) {
// reject("Error", err);
// }
// //success
// if (data) {
// resolve(data.Body.toString())
// }
// })
// })
// }
但现在出现此错误
const AWS = require('aws-sdk/clients/s3')
const s3 = new AWS.S3()
答案 0 :(得分:0)
代码中的s3
不是S3客户端的实例,而只是模块。您需要先创建一个新的客户端实例。
const S3 = require('aws-sdk/clients/s3');
const s3 = new S3();
// you can now do s3.getObject
答案 1 :(得分:0)
要使其正常工作,我必须进行更改
const AWS = require('aws-sdk/clients/s3')
const s3 = new AWS.S3()
到
const AWS = require('aws-sdk')
const s3 = new AWS.S3()
我很想知道为什么我需要导入整个AWS开发工具包才能使其正常工作。