2015-12-10 3 views
0

Я использую AWS Lambda и API Gateway для создания пользовательской конечной точки для нагрузочных тестов. Я загрузил функцию моего обработчика, которая находится в файле, вместе с модулями узлов, необходимыми для функции в zip, и правильно настроил API-интерфейс API-интерфейсов в соответствии с инструкциями (в соответствии с тем, как я работал раньше) , но я продолжаю получать ошибку: {«error»: «Отсутствует токен аутентификации»}. Все, что я видел в Интернете, пока указывает на то, что URL-адрес, который я передаю с запросом POST, недействителен, но я сделал аналогичную работу с конечным пунктом с запросом GET. Насколько я знаю, я правильно настроил запрос POST (используя Superagent) и передаю действительный токен доступа, а также жестко закодированные параметры как часть URL (действительные параметры).Выполнение запроса POST с использованием Superagent, AWS Lambda, API Gateway

// Dependencies 
var request = require('superagent'); 
var sync = require('synchronize'); 

exports.handler = function(event, context) {  

    sync.fiber(function() { 

    // Grabs params passed into the URL as a JSON object 
    var querystring = (event.querystring); 

    // Replaces params with an updated version which includes a single quotation 
    var queryStringUpdate = querystring.replace(/=/g, ":").replace(/}/g, "'}").replace(/:/g, ":'").replace(/,/g, "',"); 

    // Updates the param information and sets it as a new string 
    eval('var queryString2 =' + queryStringUpdate); 

    // Define specific query params to be used in the REST calls 
    var userId = (queryString2.userId === undefined ? '229969' : queryString2.userId); 
    var roomdId = (queryString2.roomId === undefined ? '4' : queryString2.roomId); 
    var inviterId = (queryString2.inviterId === undefined ? '212733' : queryString2.inviterId); 

    var createInvitePost = function() { 
     request 
     .post('https://some_url/v2/invites/212733/create') 
     .set({'access-token': 'some_access_token'}) 
     .set('Content-Type', 'application/json') 
     .query({user_id: "229969"}) 
     .query({room_jid: "4"}) 
     .end(function(err, res){ 
      if (err) { 
       context.fail("Uh oh, something went wrong"); 
      } else { 
       context.done(null, "Hurray, it worked!!"); 
      } 
     }); 
    }; 

    try { 
     createInvitePost(); 
    } catch(errOne) { 
     alert("No bueno!!"); 
    } 
}); 

}; 

Любые мысли об этом ?? Спасибо

ответ

0

Обычно я получаю эту ошибку, когда пропустил часть URL-адреса, необходимого для моего API. Раньше это либо название сцены, имя с ошибкой, либо отсутствующий параметр Path.

+0

Да, я видел это как возможность. Что странно, так это то, что я могу запустить завиток или запустить этот URL-адрес в Postman, и он работает нормально. Я ценю обратную связь –

+0

Если ваш curl работает, но вызов от Superagent не делает, интересно, есть ли способ, которым вы можете использовать HTTP-прокси, например Charles, чтобы вы могли получить журнал точно, что происходит через провод и сравнить два. Также может работать Wireshark или даже tcpdump. – kennbrodhagen

+0

Хорошая идея. Спасибо за предложение –

0

Я из команды Api Gateway.

Как уже говорилось, наиболее распространенной причиной получения ответа 403 является неправильный путь/метод. Я не знаком с Superagent, но если вы запустили тот же запрос в Postman и cURL, то я был бы удивлен, если у вас был неправильный путь/метод.

Возможно также проверить проводной журнал, если это возможно, чтобы убедиться, что ваша логика запроса не добавляет переднюю косую черту перед символом «?».

Некоторые вещи, чтобы проверить:

установивших вы какие-либо недавние изменения в API?

Является ли этап 'v2' (я предполагаю, что это этап), указывающий на развернутую версию API, в которой POST приглашает/212733/create?

«Access-token» не должен влиять на уровень Api Gateway. Если вы пытаетесь использовать собственный Api Gateway Api Key, заголовок «x-api-key».

Jack

+0

Джек. Большое спасибо за информацию. Это очень полезно. Мне удалось заставить его работать с использованием модуля Request.js вместо Superagent. Не уверен, что конкретно изменило ситуацию, но, похоже, теперь это работает. –