Cheerio не загружает HTML внутри Axios get request - все это внутри обработчика асинхронных намерений - PullRequest
0 голосов
/ 26 апреля 2019

Я работаю над намерением для навыка Alexa, который получит заголовки на новостном сайте.Мой код находится в узле js и размещен на AWS Lambda.Я использую axios и cheerio для просмотра веб-страниц, и когда я запускаю их на своей локальной машине из командной строки, код успешно извлекает HTML, и cheerio может получать нужные мне данные.Однако, когда я запускаю код на Lambda, он выдает ошибку каждый раз, когда я пытаюсь загрузить HTML с cheerio.

Интересно, что я пытался загрузить «строку html» с помощью cheerio следующим образом:

const $ = cheerio.load('<h2 class="title">Hello world</h2>');

, и я смог использовать его и получить необходимые данные о лямбде.Однако, если я получаю html из axios и пытаюсь загрузить его с помощью cheerio, он выдаст ошибку.Это вызов, который я выполняю, который не работает:

const $ = cheerio.load(response.data);

Мой код приведен ниже:

"use strict";
const axios = require('axios');
const cheerio = require('cheerio');
const url = "https://news.ycombinator.com";

const newsHandler = {
    "newsIntent": async function () {
        var speechOutput = "";

        axios.get(url)
            .then(response => {
                data = [];
                const $ = cheerio.load(response.data);
                $("table.itemlist tr td:nth-child(3)").each((i, elem) => {
                    data.push(
                        $(elem).text().trim()
                    );
                });
                for (const headline of data) {
                    speechOutput += headline + " ";
                }
                this.emit(":tell", speechOutput);
            })
            .catch(error => {
                console.log(error);
            })
    }
}

module.exports = newsHandler;

Он должен иметь возможность анализировать HTML-код, полученный из Axios, для всех элементовс помощью описанного селектора и добавьте их текст в массив данных.Однако даже простое написание строки:

const $ = cheerio.load(response.data);

вызывает ошибку.Пожалуйста, помогите!

...