Как использовать модуль запроса в node.js lambda - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь использовать модуль запроса в AWS Lambda для Node.js, но у меня нет хороших результатов.

Эта функция, которую я имею до сих пор:

const request = require('request');
url = 'https://www.google.com'

exports.handler = async (event) => {

    request(url, (error,res,body) => {
        console.log(error);    //this is not printing
        console.log(res);      //this is not printing
        console.log(body);     //this is not printing
        console.log('Come on!!'); //this is not printing
    });

    console.log(url); //This is the only thing printing, you can see in the Function Logs below, second line.

};

и вот ответ, который я получаю:

Response:
null

Request ID:
"3e46f401-f26d-435d-90be-ac848c6c3a39"

Function Logs:
START RequestId: 3e46f401-f26d-435d-90be-ac848c6c3a39 Version: $LATEST
2019-10-14T08:06:23.755Z    3e46f401-f26d-435d-90be-ac848c6c3a39    INFO    https://www.google.com
END RequestId: 3e46f401-f26d-435d-90be-ac848c6c3a39
REPORT RequestId: 3e46f401-f26d-435d-90be-ac848c6c3a39  Duration: 368.93 ms Billed Duration: 400 ms Memory Size: 128 MB Max Memory Used: 92 MB  Init Duration: 461.54 ms

Мне интересно, почему я не получаю никакого ответа из метода запросов. Я попробовал на своем ноутбуке, и часть кода вне обработчика работает просто отлично.

Я загрузил проект в виде zip-файла, поэтому папка node_modules с модулем запроса действительно есть. Я отметил несколько решений, использующих модуль http вместо запроса, но я хотел бы сначала понять, почему это не работает, прежде чем переходить к другому решению.

1 Ответ

2 голосов
/ 14 октября 2019

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

Это означает, что ваша функция возвращает неявное обещание, которое уже выполнено. Это останавливает лямбду. Итак, либо:

A) Напишите свой код, используя async / await, который, вероятно, требует request-promise или аналогичный:

exports.handler = async event => {
    const res = await promisifiedRequest(url);
    console.log(res.statusCode);
    console.log(url);
};

или

B) Преобразование функциииз async/await использовать обратные вызовы, например:

exports.handler = (event, context, callback) => {
    const res = request(url, (error, res, body) => {
        console.log('Come on!!');
        callback(null, res.statusCode);
    });
    console.log(url);
};

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