将 Lambda 同步转换为异步事件问题
Convert Lambda synchronise to async event issue
我正在尝试使用无服务器框架制作基本的待办事项应用程序。我的同步 lambda 函数运行良好,并将我的任务和任务详细信息存储在 dynamodb table 中。我决定将我的同步 lambda 函数转换为异步函数。我正在使用 Postman 测试 api。但是现在我有事件触发问题,它不存储我的 taskDetails
,它只存储我的任务。在我的 post 中,我可以看到事件触发器,这里是 post-method and this is what I get。我不明白我在这里做错了什么。 Ps。我是 Lambda 的新手。
这是同步 lambda 函数
'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.createTodo = (event, context, callback) => {
const datetime = new Date().toISOString();
const data = JSON.parse(event.body);
const params = {
TableName: 'todos',
Item: {
id: uuid.v1(),
task: data.task,
taskDetails: data.taskDetails,
done: false,
createdAt: datetime,
updatedAt: datetime
}
};
dynamoDb.put(params, (error, data) => {
if (error) {
console.error(error);
callback(new Error(error));
return;
}
const response = {
statusCode: 201,
body: JSON.stringify(data.Item)
};
callback(null, response);
});
}
这是我的 async 和 try catch 中的错误。
'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.createTodo = async event => {
const datetime = new Date().toISOString();
const data = JSON.parse(event.body);
const params = {
TableName: 'todos',
Item: {
id: uuid.v1(),
task: data.task,
taskdetails: data.taskdetails,
done: false,
createdAt: datetime,
updatedAt: datetime
}
};
try {
let response = await dynamoDb.put(params).promise();
return {
statusCode: 200,
body: JSON.stringify(data),
}
} catch (error) {
console.log(error);
}
};
在您的同步代码中,您使用的是 taskDetails
,而在异步实现中,它是 taskdetails
。
我假设在您的 get 方法中您正在从 taskDetails
读取数据,因此您的 get api 没有返回 taskDetails
作为响应。
转到 dynamodb 控制台并检查您的 ID,您将能够在 taskdetails
属性中看到数据。
我正在尝试使用无服务器框架制作基本的待办事项应用程序。我的同步 lambda 函数运行良好,并将我的任务和任务详细信息存储在 dynamodb table 中。我决定将我的同步 lambda 函数转换为异步函数。我正在使用 Postman 测试 api。但是现在我有事件触发问题,它不存储我的 taskDetails
,它只存储我的任务。在我的 post 中,我可以看到事件触发器,这里是 post-method and this is what I get。我不明白我在这里做错了什么。 Ps。我是 Lambda 的新手。
这是同步 lambda 函数
'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.createTodo = (event, context, callback) => {
const datetime = new Date().toISOString();
const data = JSON.parse(event.body);
const params = {
TableName: 'todos',
Item: {
id: uuid.v1(),
task: data.task,
taskDetails: data.taskDetails,
done: false,
createdAt: datetime,
updatedAt: datetime
}
};
dynamoDb.put(params, (error, data) => {
if (error) {
console.error(error);
callback(new Error(error));
return;
}
const response = {
statusCode: 201,
body: JSON.stringify(data.Item)
};
callback(null, response);
});
}
这是我的 async 和 try catch 中的错误。
'use strict'
const AWS = require('aws-sdk');
const uuid = require('uuid');
const dynamoDb = new AWS.DynamoDB.DocumentClient();
module.exports.createTodo = async event => {
const datetime = new Date().toISOString();
const data = JSON.parse(event.body);
const params = {
TableName: 'todos',
Item: {
id: uuid.v1(),
task: data.task,
taskdetails: data.taskdetails,
done: false,
createdAt: datetime,
updatedAt: datetime
}
};
try {
let response = await dynamoDb.put(params).promise();
return {
statusCode: 200,
body: JSON.stringify(data),
}
} catch (error) {
console.log(error);
}
};
在您的同步代码中,您使用的是 taskDetails
,而在异步实现中,它是 taskdetails
。
我假设在您的 get 方法中您正在从 taskDetails
读取数据,因此您的 get api 没有返回 taskDetails
作为响应。
转到 dynamodb 控制台并检查您的 ID,您将能够在 taskdetails
属性中看到数据。