amazon-web-services - 如何正确响应对 AWS API 网关的 axios 请求
问题描述
我目前正在尝试设置一个将记录放入 mysql 数据库的 AWS lambda。当通过 axios 请求调用负责的 API 时,lambda 确实会被触发并完成而不会引发任何错误。
拉姆达:
exports.registerUser = async (event,contex,callback) => {
data = JSON.parse(event.body)
console.log(data)
con = mysql.createConnection({
host: "host",
user: "name",
password: "password",
database: 'component'
});
await con.connect(function(err) {
if (err) {
console.log(err)
throw err;
}
console.log("Connected!");
})
var timestamp = Date.now();
id_user =uuidv4();
var sql_user = "INSERT INTO user (id_user, first_name, last_name, email, city, registration) VALUES ('"+id_user+"', '"+data.first_name+"', '"+data.last_name+"', '"+data.email+"', '"+data.city+"', "+timestamp+")"
await new Promise(function(resolve,reject){
con.query(sql_user, function (err, result) {
if (err) return reject(err);
console.log("1 record inserted");
resolve(result)
});
})
await con.end(function(err) {
if (err) {
console.log(err)
throw err;
}
console.log("Disonnected!");
})
console.log('SUCCESS')
return callback(null, 'success')
}
但是,在客户端,axios 请求总是返回 502。
客户:
cloud.registerNode = async function(event, callback){
axios.post(API, JSON.stringify({
id_user: event.id_user,
edge_uuid: event.edge_uuid,
edge_name: event.edge_name,
edge_key: event.edge_key,
cloud_key: event.cloud_key
})).then(function(response){
console.log('It worked with response:')
console.log(response)
}).catch(function(err){
console.log('error thrown:')
console.log(err)
})
}
我怀疑回调不是去这里的正确方法,但我不确定如何正确执行此操作。任何帮助将不胜感激。
解决方案
我目前正在使用 DynamoDB 数据库做类似的事情,并使用以下代码调用 API 网关来触发我的 POST Lambda,
handleSubmit = (event) => {
event.preventDefault();
console.log('state', this.state);
const { records, record, album, artist, date, imageUrl } = this.state;
const newRecord = { record, album, artist, date, imageUrl };
fetch("https://vv2qx5zqb7.execute-api.us-east-1.amazonaws.com/Dev", {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({records: record, album, artist, date, imageUrl})
});
这就是亚马逊描述使用异步的方式, https://docs.aws.amazon.com/lambda/latest/dg/nodejs-prog-model-logging.html
console.log('加载函数');
exports.handler = async function(event) {
//console.log('Received event:', JSON.stringify(event, null, 2));
console.log('value1 =', event.key1);
console.log('value2 =', event.key2);
console.log('value3 =', event.key3);
return event.key1 // Echo back the first key value
};
推荐阅读
- c++ - 当 operator delete() 被删除时,operator new() 的行为会有所不同,具体取决于默认构造函数的存在
- c# - 在 Visual Studio 中调试时查看变量的内存地址?
- node.js - 无法从 mongoose 更新和删除数据
- angular - 返回 Observable
为布尔值 - java - 如何在 Spring Kafka 客户端中寻找偏移量?
- java - 如何从 python 使用 jdbc 连接到 oracle?
- angular - Angular-ChartJs:在图形 chartJs 的自定义工具提示中使用服务
- python - 如何让敌人改变方向 Python
- laravel - 在 Laravel 6 中选择不同的总分页错误
- microcontroller - 从 SRAM 启动