Как я могу поймать ошибку, возвращаемую ax ios? - PullRequest
0 голосов
/ 19 июня 2020

Я собираю данные с веб-сайта с помощью ax ios и приветствую ios, и я хочу, чтобы консоль только регистрировала данные из console.log (). Однако, когда я запускаю файл, в журнале отображаются все файлы console.log (), а также сообщения об ошибках.

Мой код:

const cheerio = require('cheerio')
const axios = require('axios')
var urls = [
   //array of urls
]

for (let val in urls) {

    axios.get(urls[val]["loc"]).then((response) => {

        const $ = cheerio.load(response.data)

        var price = $(".price")
        if (price) {
            price = price.text().trim()
            var justNumPrice = price.match(/\d+/g);
            justNumPrice = justNumPrice.join('.')
            justNumPrice = parseFloat(justNumPrice)
            ;
        }
        var sku = $("#sk").text().trim()

        var mn = $("#mn").text().trim()

        if (sku && price){console.log(sku,", ",justNumPrice, ", ", mn)}
    })
}

Консоль:

(node:9380) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'join' of null
    at C:\Users\nciambrone\Desktop\priceScraper\logic.js:8676:41
    at runMicrotasks (<anonymous>)
    at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:9380) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag `--unhandled-rejections=strict` (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 943)
3122-APC45 ,  29.99 ,  Plantronics
MTL-6910 ,  106.95 ,  Mitel
7800-005 ,  169.99 ,  ICC
5238-BUFEX ,  41.99 ,  Bogen

Затем я попытался запустить функцию асинхронно:

const cheerio = require('cheerio')
const axios = require('axios')

var urls = [//array of urls]

async function fetchHTML(url){
    const { data } = await axios.get(url)
    return cheerio.load(data)
}

for (let val in urls) {

        const $ = await fetchHTML(urls[val]["loc"])

        var price = $(".price")
        if (price) {
            price = price.text().trim()
            var justNumPrice = price.match(/\d+/g);
            justNumPrice = justNumPrice.join('.')
            justNumPrice = parseFloat(justNumPrice)
            ;
        }
        var sku = $("#sk").text().trim()
        var sku = $("#sk").text().trim()

        var mn = $("#mn").text().trim()

        if (sku && price){console.log(sku,", ",justNumPrice, ", ", mn)}

}

и я получите следующую ошибку:

const $ = await fetchHTML(urls[val]["loc"])

              ^^^^^

    SyntaxError: await is only valid in async function
    at wrapSafe (internal/modules/cjs/loader.js:1054:16)
    at Module._compile (internal/modules/cjs/loader.js:1102:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:71:12)

Может ли кто-нибудь помочь мне избежать этих ошибок в консоли?

...