成功登录后,我正在使用带有cognito的lambda写入dynamoDB。
节点8.10的承诺和asycn/await
的布局不同。 callback(null, event)
退货不适用于我。现在任何人如何用节点8.10解决Invalid lambda function output : Invalid JSON
问题。
// Load the AWS SDK for Node.js
var AWS = require('aws-sdk');
// Set the region
//AWS.config.update({region: 'REGION'});
// Create DynamoDB document client
var docClient = new AWS.DynamoDB.DocumentClient({apiVersion: '2012-08-10'});
exports.myHandler = async (event, context, callback) => {
// TODO implement
console.log ("Authentication successful");
console.log ("Trigger function =", event.triggerSource);
console.log ("User pool = ", event.userPoolId);
console.log ("App client ID = ", event.callerContext.clientId);
console.log ("User ID = ", event.userName);
const params = {
TableName: 'xxxx',
Item: {
'userId': event.userName,
'systemUpdateDate': new Date().toJSON()
}
};
let putItem = new Promise((res, rej) => {
docClient.put(params, function(err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
});
const result = await putItem;
console.log(result);
// Return to Amazon Cognito
callback(null, event);
};
谢谢
答案 0 :(得分:0)
使用建议的async/await
的Node 8方法,您应该使用以下方法来构造函数:
async function handler(event) {
const response = doSomethingAndReturnAJavascriptObject();
return response;
}
您会收到此错误,因为返回的内容都不是可以解析为JSON对象的内容。
没有看到您的代码,很难进一步调试。我希望您可能不会偶然地await
正在使用.promise()
版本的dynamo / cognito API调用,这将导致您返回Promise而不是结果。
n.b。您仍然可以在节点8上使用'old'callback()
方法,如果发现更简单的话。