Node.js - Массив не может быть передан с помощью Cheerio каждый на Netlify Functions - PullRequest
0 голосов
/ 05 апреля 2020

Я создаю проект, временная шкала которого JS с очищенными данными Википедии JP о функциях Netlify.

Временная шкала JS требует JSON с ее определенной схемой, я удалил несколько элементов из Википедии JP для данные JSON.

Мне нужно установить эти элементы в массив и вернуть тело в виде текста при запросе HTTP.

Код, который я написал, находится здесь.

const axios = require('axios')
const cheerio = require('cheerio')
const moment = require('moment')
const ogs = require('open-graph-scraper')

const url = 'https://ja.wikipedia.org/wiki/'

moment.locale('ja')

const getOGPImagePath = async (options) => {
  return await ogs(options)
    .then((response) => {
      // console.log(response)
      const ogImagePath = response.data.ogImage.url
      return ogImagePath
    })
    .catch((error) => {
      console.log(error)
    })
}

exports.handler = async (event, context) => {
  const date = event.queryStringParameters.date
  const endpoint = url + date
  const momentDate = moment(date, 'M月D日')
  const day = momentDate.format('D')
  const month = momentDate.format('M')
  const html = await axios.get(encodeURI(endpoint),{ headers: { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100'}})
  const $ = await cheerio.load(html.data, { decodeEntities: false })
  let data = []

  $('.mw-parser-output > ul').first().find('li').not('.mw-empty-elt').each(async (i,elem) => {
    const year = String($(elem).text().match(/\d{1,4}年/)).replace(/年/, '')
    const content = String($(elem).text().match(/\-\s(.*)/))

    const contentHtml = $(elem).html().replace(/((^<a(.*)>\d{1,4}年<\/a>(.*)\s\-\s)|(^\d{1,4}年(.*)\s\-\s))/,'')

    const $c = await cheerio.load(contentHtml, { decodeEntities: false })

    const mainUrl = await 'https://ja.wikipedia.org' + $c('a').first().attr('href')

    const options = {
      url: mainUrl
    }

    // console.log(mainUrl) <- works fine

    const ogImagePath = await getOGPImagePath(options)

    // console.log(ogImagePath) <- works fine

    data.push({
      media: {  
        url: ogImagePath,
      },
      start_date: { 
        year: year,
        month: month,
        day: day
      },
      text: {
        text: contentHtml
      },  
      background: ogImagePath
    })

    // console.log(data) <- works fine
  })

  console.log(data) // <- Does not works fine. The result is '[]' empty array.

  return {
    statusCode: 200,
    body: JSON.stringify({ events: data }),
    headers: {
      'Content-Type': 'application/json; charset=utf8',
      'Access-Control-Allow-Origin': "*"
    }
  };
}

У кого-нибудь есть решение этой ситуации?

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