Получение веб-API с помощью Nodejs - Express - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь render на входе получить результат Web Api, который содержит массив данных для заполнения биржевой диаграммы.Каждый раз, когда я ввожу символ и нажимаю кнопку «Получить цитату», он должен получать данные из веб-API.Вот код, который я попробовал.Вы также найдете сообщение об ошибке.

home.handlebars

<div>
  <div>
    <h3>Charts</h3>
  </div>
  <div>
    <form action="/app" method="get">
      <label for="symbol">Symbol: </label>
      <input type="text" name="symbol" id="symbolTags" style="text-transform: uppercase" placeholder="Symbol">

      <input type="submit" id="requestSymbol" value="Get Quote">
    </form>
  </div>
</div>

<script>
  const symbolTags = document.querySelector('#symbolTags')
  const requestSymbol = document.querySelector('#requestSymbol')
  requestSymbol.addEventListener('click', getSymbolDb)
  symbolTags.addEventListener("keyup", executeEnterKey)

  function getSymbolDb() {
    $.getJSON('/app', function (data) {
      let chartData = data.chartValue.map(item => {
        item.date,
          item.open,
          item.high,
          item.low,
          item.close,
          item.volume
      })
      console.log(chartData)
    })
  }

  function executeEnterKey(event) {
    if (event.keyCode === 13) {
      requestSymbol.click()
      event.preventDefault()
    }
  }
</script>

контроллер - webApiController.js

const axios = require('axios')

exports.webApi = (req, res) => {

  let curValue = req.query.symbol

  const urlCompact = `https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol=${curValue}&outputsize=compact&apikey=TUVR`

  axios.get(urlCompact)
    .then(response => {
      let highLow = Object.keys(response.data['Time Series (Daily)']).map(date => {
        return {
          date: Date.parse(date),
          open: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['1. open']) * 100) / 100,
          high: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['2. high']) * 100) / 100,
          low: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['3. low']) * 100) / 100,
          close: Math.round(parseFloat(response.data['Time Series (Daily)'][date]['4. close']) * 100) / 100,
          volume: parseInt(response.data['Time Series (Daily)'][date]['5. volume'])
        }
      })

        res.render('home', {
          nameUpperCase: curValue,
          chartValue: highLow
        })
      })
        .catch(error => {
          console.log(error)
        })
    }

Ошибка

TypeError: Cannot convert undefined or null to object
    at Function.keys (<anonymous>)
    at axios.get.then.response (/mnt/c/Users/john/Desktop/node/controllers/webApiController.js:18:28)
    at process.internalTickCallback (internal/process/next_tick.js:77:7)

console.log (highLow)

 [{ date: 1530835200000,
    open: 185.42,
    high: 188.43,
    low: 185.2,
    close: 187.97,
    volume: 17485245 },
  { date: 1530748800000,
    open: 185.26,
    high: 186.41,
    low: 184.28,
    close: 185.4,
    volume: 16604248 } ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...