Вызов API отдыха из Lambda (JS; веб-консоль) - PullRequest
0 голосов
/ 12 февраля 2019

_

МОЙ ВЫЗОВ:

Я хотел бы получить доступ к стороннему API отдыха из моей лямбда-функции .(например, "http://www.mocky.io/v2/5c62a4523000004a00019907").

". Это предоставит обратно файл JSON, который я затем буду использовать для извлечения данных

_

МОЙ ТЕКУЩИЙ КОД:

var http = require('http');

exports.handler = function(event, context, callback) {
    console.log('start request to Mocky');

    http.get('http://www.mocky.io/v2/5c62a4523000004a00019907', function(res) {
            console.log(res);

        })
        .on('error', function(e) {

            console.log("Got error: " + e.message);
        });
};

Это не выдает ошибку, но, похоже, не возвращает обратно JSON

_

МОИ ОТКРЫТЫЕ ВОПРОСЫ:

1) Как я могу Извлеките JSON , чтобы я мог работать с ним

2) Возможно, в будущем мне также понадобится отправить через Аутентификацию в заголовке запроса (Bearer).также возможно с этим методом?

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Есть много парней, у которых уже решена равная проблема ... Посмотрите на , или ,

0 голосов
/ 12 февраля 2019

Вероятно, проблема в том, что ваша лямбда-функция завершается до регистрации ответа.

Мы постоянно используем заголовки Authorization для вызова наших лямбд.Вопрос о том, можете ли вы использовать один для вызова стороннего API, зависит от них, а не от вас, поэтому проверьте документацию.

Поскольку ваш HTTP-вызов выполняется асинхронно, выполнение лямбды продолжается, пока этот вызоврешается.Поскольку в лямбде больше нет команд, она завершается до возврата вашего ответа и может быть зарегистрирована.

EDIT : модуль http.get трудно использовать чисто с async / await.По этой причине я обычно использую superagent, axios или request, или даже node-fetch.Я буду использовать request в своем ответе.Если вы должны использовать собственный модуль, см. EG этот ответ .В противном случае, npm install request request-promise и используйте мой ответ ниже.

Схема, которую многие люди используют в эти дни для такого рода вызовов, использует, например, async/await (требуется Узел 8 +):

var request = require('request-promise')

exports.handler = async function(event, context, callback) {
    console.log('start request to Mocky');
    try {
        const res = await request.get('http://www.mocky.io/v2/5c62a4523000004a00019907')
        console.log(res)
        callback(null, { statusCode: 200, body: JSON.stringify(res) })
    }
    catch(err) {
        console.error(err.message)
        callback('Got error ' + err.message)
    }
};

За асинхронной / ожидающей версией намного проще следовать IMO.

Все, что находится внутри функции async, помеченной await, должно быть разрешено до продолжения выполнения.Вокруг этого много статей, попробуйте этот .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...