Как получить правильный ответ от API на AWS лямбда - PullRequest
1 голос
/ 31 октября 2019

Я впервые обращаюсь к сообществу Stack-Overflow. Уже несколько дней я учусь пользоваться лямбда-сервисом AWS, связанным с GETEWAY. Мне нужно выполнить GET для API, но проблема в том, что я постоянно получаю пустой ответ.

Вот пример моего кода с API свободного доступа:


var getApi= async function(event) {
        var x =  await axios.get(url)       
}


var getResponse = async function(){
  var data= await getApi()
  if (data.status ==200){
       return data
  }

}



exports.handler = async function() {


    return getResponse().then(res => {
        const response = {
            statusCode: 200,
            body: JSON.stringify(res), 
        };
        return response

    }).catch(error => { return error})
};

СпасибоВы очень за вашу помощь,

Ответы [ 3 ]

0 голосов
/ 01 ноября 2019

Я сам столкнулся с этим вопросом совсем недавно. Решение:

  1. Если вы используете Lambda в качестве авторизатора в шлюзе AWS, тогда Lambda должна вернуть объект JSON, который содержит PrincipalId, policyDocument и context.
  2. Контекст - это карта, куда вы можете добавить свои собственные переменные, такие как Strings, Numbers и Booleans.

Все содержимое объекта JSON будет возвращено в шлюз. Ознакомьтесь с этой документацией: https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-lambda-authorizer-output.html

У меня также есть довольно подробный пост Stackoverflow о том, как настроить шлюз с помощью YAML-файла Cloudformation: AWS API Gateway с Lambda Authorizer

0 голосов
/ 01 ноября 2019

Это из-за асинхронного вызова node.js. Ваша функция завершает работу до того, как асинхронный вызов вернется. Я исправил несколько строк кодов. Я хотел бы, чтобы это было полезно для вас.

const getApi= async function() {
   return await axios.get(url)
}

const getResponse = async function(){
    const data= await getApi()
    if (data.status ==200){
        return data
    }
}

exports.handler = async function() {
    return await getResponse().then(res => {
        const response = {
            statusCode: 200,
            body: JSON.stringify(res), 
        }
        return response
    }).catch(error => console.error(error))
}
0 голосов
/ 01 ноября 2019

Я бы предложил использовать console.log() по всему файлу для отладки. По умолчанию вы должны увидеть ответ на эти журналы консоли в Cloudwatch :)

Подробнее читайте здесь:

https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html

...