SyntaxError: неожиданный токен в node.js

0

Я использую следующий код для извлечения данных с сервера. Но вместо

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 ответа

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); от chunks.push(new Buffer(chunk)); и Buffer.concat(chunks); от Buffer.concat(chunks).toString(); ;)
  • 0
    @GuillaumeCisco почему?
Показать ещё 7 комментариев
0

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

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

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

  • 0
    на стороне сервера данные получаются без каких-либо ошибок
  • 1
    Это не значит, что он не может вернуть недопустимую строку JSON.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню