В вашем коде есть пара неверных предположений.
1 - Глядя на данные, вы можете видеть, что свойство Title присутствует в каждом отдельном объекте внутри Search свойство, которое является Array
, поэтому при правильном синтаксическом анализе JSON у вас будет проблема с got.Title
2 - Событие данные ответ объекта может вызываться несколько раз, пока вы не получите все данные, каждый раз, когда он вызывается, вы получаете кусок данных.
После того, как все данные были отправлены, событие end вызывается, и есть место для анализа JSON.
Ваш код пытается проанализировать неполную строку JSON, только первый фрагмент.
Наиболее распространенный подход - объявить массив вне функций, которые будут обрабатывать события данные и конец . Для каждого события data вы помещаете sh фрагмент во внешний массив, а в событии end вы объединяете его.
Проверьте это:
var express = require('express')
var app = express()
var body = require('body-parser')
var https = require('https')
app.get('/results', function (req, res) {
https.get('https://www.omdbapi.com/?apikey=d49698c3&s=harry', function (response) {
const chunks = []
response.on('data', function (chunk) {
chunks.push(chunk)
})
response.on('end', function () {
const data = Buffer.concat(chunks)
var got = JSON.parse(data)
// Try this one out as well
// res.json(got)
res.send(got.Search[0].Title)
})
})
})
app.listen(3000)
Я только что протестировал приведенный выше код, и он работает как шарм.