簡體   English   中英

NodeJ +請求承諾-錯誤捕獲

[英]NodeJs + Request-promise - error catching

我在Discord的bot中無法使用我的函數進行錯誤處理。 我現在得到的是一個命令,該命令從網站上抓取信息,我想要這樣做,因此如果出現錯誤(404),用戶將獲得一些反饋。 我將如何去做呢? 現在,我目前有一些東西,但是我不確定自己在做什么錯。 這是一段代碼:

//modules used
const rp = require('request-promise-native');
const errors = require('request-promise/errors');
const cheerio = require('cheerio');

if (message.content.startsWith(prefix + 'latest')) {

    //website url variables
    const website_domain = "https://hypebeast.com/";
    let website_path = args[0];
    let website_url = website_domain + website_path;

    //extra arguments variable
    let extra_arg = args.slice(1).join(" ");

    if (extra_arg.length > 0) {
        message.reply('too many arguments! Please refer to `h.help` for correct usage.');

    } else {

        //opening url and scrapping elements
        function scrapData(website_url) {
            return rp(website_url)
                .then(body => {
                    let items = [],
                        $ = cheerio.load(body).catch(errors.StatusCodeError, function (reason) {
                            console.log(reason);
                        });

                    //web scrapping here
                    $('.post-box').each(function() {
                        let title = $(this).find($('.title h2 span')).first().text(),
                            caption = $(this).find($('.post-box-excerpt p')).first().text(),
                            article_url = $(this).find($('.col-hb-post-image a')).first().attr('href'),
                            thumbnail_long = $(this).find($('.thumbnail img')).first().attr('src');

                        //adding title, caption, etc to list
                        items.push({title, caption, article_url, thumbnail_long});

                        //check items in console
                        console.log(items);
                    })
                    return items;
                })
        }

我剛剛修改了您的代碼,請在下面的代碼中稍作嘗試。

//modules used
 const rp = require('request-promise-native');
 const errors = require('request-promise/errors');
 const cheerio = require('cheerio');

 if (message.content.startsWith(prefix + 'latest')) {

//website url variables
const website_domain = "https://hypebeast.com/";
let website_path = args[0];
let website_url = website_domain + website_path;

//extra arguments variable
let extra_arg = args.slice(1).join(" ");

if (extra_arg.length > 0) {
    message.reply('too many arguments! Please refer to `h.help` for correct usage.');

} else {


    var options = {
        uri: website_url,
        transform: function (body) {
            return cheerio.load(body);
        }
    };
    rp(options)
    .then(function ($) {
        // Process html like you would with jQuery... 
        $('.post-box').each(function() {
                    let title = $(this).find($('.title h2 span')).first().text(),
                        caption = $(this).find($('.post-box-excerpt p')).first().text(),
                        article_url = $(this).find($('.col-hb-post-image a')).first().attr('href'),
                        thumbnail_long = $(this).find($('.thumbnail img')).first().attr('src');

                    //adding title, caption, etc to list
                    items.push({title, caption, article_url, thumbnail_long});

                    //check items in console
                    console.log(items);
                });
    })
    .catch(function (err) {
        console.log(err);
    });

}    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM