Я пытаюсь 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 } ]