首页 > 解决方案 > 如何正确响应对 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)
})

}

我怀疑回调不是去这里的正确方法,但我不确定如何正确执行此操作。任何帮助将不胜感激。

标签: amazon-web-servicesaxiosaws-api-gateway

解决方案


我目前正在使用 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   
};

推荐阅读