@rausuj

Невозможно прочитать «length»?

Я получаю эту ошибку:

Cannot read property 'length' of undefined


В этой строке происходит ошибка:

for (var i = 0; i < chunk.rows.length; i++ ) {

request:

request(
    {
        url: 'http://localhost:5000/positions/get',
        method: 'POST',
        headers: headers
    }, 
    function (error, response, body) {
        console.log('status: ' + response.statusCode)
    }
)
.on('data', function (chunk) {
    console.log(`body: ${(chunk)}`)
    console.log(typeof chunk)
    console.log(typeof chunk.rows)
    var formData = {Id: 75, Name: 'CEO'}
    for (var i = 0; i < chunk.rows.length; i++ ) {
        if (chunk.rows[i].Name === formData) {
            console.log('OK')
        } else {
            console.log('NO')
        }
    }
})


Ответы, которые я получаю

> console.log(`body: ${(chunk)}`):

body: {"rowsCount":75,"rows":[..., {"Id":75,"Name":"CEO"}]}


> console.log(typeof chunk):

object

> console.log(typeof chunk.rows):

undefined

Как исправить то что chunk.rows не имеет тип данных.
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
Chunk выглядит как строка JSON или какая-то схожая структура данных. Быть может, перед обращением к свойствам её стоит распарсить в "правильный" JS-объект?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
SagePtr
@SagePtr
Еда - это святое
Могу предположить, что chunk является строкой и перед тем, как оттуда брать поле rows, нужно сделать JSON.parse с ним. Но лучше это сделать, когда вся строка будет загружена (то есть, обрабатывать не в обработчике события 'data', который вызывается много раз с каждой мелкой порцией новых загруженных данных, а в колбэк-функции, передаваемой в ф-ю request последним параметром). В противном случае ваш код будет работать только с мелкими ответами, которые удалось уместить в один пакет.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы