【问题标题】:How do I access the data array in my axios function如何访问我的 axios 函数中的数据数组
【发布时间】:2020-04-13 19:06:49
【问题描述】:

我正在尝试访问包含请求信息的数据数组,但我似乎无法弄清楚。

当我尝试在视图中显示它时,我得到一个未定义的无法读取长度属性;

const getData = () => {
    axios.get("https://www.worldometers.info/coronavirus/")
        .then(res => {
            const data = [];
            const $ = cheerio.load(res.data);
            $('.maincounter-number').each((index, element) => {
                const numberData = $(element).text();
                data[0] = {numberData: numberData};
            });
        }).catch(err => {
        console.log("Error fetching and parsing data: ", err);
    });

}


app.get("/", (req, res) => {
    const data = getData();;
    res.render('index', {title: 'Home', data: data});

});

哈巴狗视图

p #{data.dataNumbers}

我也试过这个功能,但我遇到了同样的问题

async function scrapeWorldOMeter(){
   try{
       const worldOMeterResponse = await axios.get("https://www.worldometers.info/coronavirus/");
       const data = [];
       const $ = cheerio.load(worldOMeterResponse.data);
       $('.maincounter-number').each((index, element) => {
       const numberData = $(element).text();
       data[0] = {numberData: numberData};
       return data[0];
   });

   }
   catch(err){
       throw new Error(`Can't scrape WorldOMeter ${err}`)
   }
}


app.get("/", async(req, res) => {
const data = await scrapeWorldOMeter()
res.render('index', {title: 'Home', data});
});

【问题讨论】:

    标签: node.js axios pug


    【解决方案1】:

    您可以通过正确使用 Promise 来修复您的第一个代码 sn-p,

    const getData = () => {
        return axios
            .get('https://www.worldometers.info/coronavirus/')
            .then((res) => {
                const data = [];
                const $ = cheerio.load(res.data);
                $('.maincounter-number').each((index, element) => {
                    const numberData = $(element).text();
                    data[0] = { numberData: numberData };
                });
                return data[0];
            })
            .catch((err) => {
                console.log('Error fetching and parsing data: ', err);
            });
    };
    
    app.get('/', (req, res) => {
         const data = getData().then((res) => {
            res.render('index', { title: 'Home', data: data });
        });   
    });
    

    这里的问题是您没有在 getData() 中返回 axios 承诺,并且您没有在 get 路由中使用 then 链接响应。

    您的第二个代码 sn-p 可以通过正确使用 async/await 来修复,

    async function scrapeWorldOMeter() {
        try {
            const worldOMeterResponse = await axios.get(
                'https://www.worldometers.info/coronavirus/'
            );
            const data = [];
            const $ = cheerio.load(worldOMeterResponse.data);
            $('.maincounter-number').each((index, element) => {
                const numberData = $(element).text();
                data[0] = { numberData: numberData };
            });
            return data[0];
        } catch (err) {
            throw new Error(`Can't scrape WorldOMeter ${err}`);
        }
    }
    
    app.get("/", async(req, res) => {
    const data = await scrapeWorldOMeter();
    res.render('index', {title: 'Home', data});
    });
    

    这里的问题是您在每个循环的 jquery 中返回 data[0]。您只需将其移至循环外的下一行

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 2019-03-07
      • 2022-12-17
      • 2017-11-18
      • 2011-09-06
      • 1970-01-01
      • 2018-07-02
      • 2018-02-10
      • 1970-01-01
      相关资源
      最近更新 更多