2014-01-06 4 views
0

Am используя следующий код для извлечения данных с сервера. ВместоSyntaxError: Неожиданный маркер в node.js

var jobData = JSON.parse(data); 

подводит

undefined:1 
1afcec877d925d110","date":"Mon Jan 06 2014 09:33:13 GMT+0530 (IST)","id":"51", 
                      ^
SyntaxError: Unexpected end of input 
    at Object.parse (native) 

код

var options = { 
        host: '172.16.2.120', 
        path: '/getModes?mode=' + jobLists, 
        port: '8080', 
        method: 'GET' 
       }; 

       var reqOs = http.request(options, function (resOs) { 
        resOs.on('data', function (data) {    
        var jobData = JSON.parse(data);    
        }); 
        resOs.on('end', function() {   

        }); 
       }); 
       reqOs.on('error', function (e) { 
        console.log('problem with request: ' + e.message); 
       }); 
       reqOs.end(''); 

ответ

2

Вы должны накапливать куски данных, передаваемых в обработчик data событий, и обрабатывать их, когда запрос HTTP закончилась:

var reqOs = http.request(options, function (resOs) { 
    var chunks = []; 
    resOs.on('data', function (chunk) { 
    chunks.push(chunk); 
    }); 
    resOs.on('end', function() { 
    var json = Buffer.concat(chunks); 
    var jobData = JSON.parse(json); 
    ... 
    }); 
}); 

Причина этого заключается в том, что data событие может быть вызвано в в середине чтения ответа.

+0

вы должны заменить 'chunks.push (chunk);' by 'chunks.push (новый Buffer (chunk));' и 'Buffer.concat (chunks);' by 'Buffer.concat (chunks) .toString(); ';) –

+0

@GuillaumeCisco почему? – robertklep

+0

'заставляют json анализировать результат 'Buffer.concat' выкидывать ошибку в последних версиях js узла. –

0

It похоже, что строка JSON, на которую отвечает ваш сервер, недействительна:

1afcec877d925d110","date":"Mon Jan 06 2014 09:33:13 GMT+0530 (IST)","id":"51", 
                      ^

Если строка заканчивается так, это недействительно JSON. Проверьте строку JSON, возвращаемую вашим сервером, и попытайтесь сделать ее действительной.

+0

на стороне сервера данные получают любую ошибку – Sush

+1

Это не значит, что он не может вернуть недопустимую строку JSON. – rednaw

Смежные вопросы