2016-06-27 4 views
0

Я пытаюсь сделать метод GET внутри Nodejs. После выполнения GET я хочу использовать функцию MAP и собирать все имена в виде массива.не может прочитать карту undefined

Но я получаю следующее сообщение об ошибке,

/root/server.js:21                                              
    var op = body.products.map(function(item) {                                       
         ^                                            

TypeError: Cannot read property 'map' of undefined                                      
    at IncomingMessage.<anonymous> (/root/server.js:21:27)                                    
    at emitNone (events.js:85:20)                                           
    at IncomingMessage.emit (events.js:179:7)                                        
    at endReadableNT (_stream_readable.js:913:12)                                       
    at _combinedTickCallback (internal/process/next_tick.js:74:11)                                  
    at process._tickCallback (internal/process/next_tick.js:98:9) 

КОД,

var http = require('http'); 
    console.log("hi") 
    var options = { 
     host: 'api.usergrid.com', 
     path: '/siddharth1/sandbox/restaurants' 
    }; 

    var req = http.get(options, function(res) { 
     console.log('STATUS: ' + res.statusCode); 
     console.log('HEADERS: ' + JSON.stringify(res.headers)); 

     // Buffer the body entirely for processing as a whole. 
     var bodyChunks = []; 
     res.on('data', function(chunk) { 
     // You can process streamed parts here... 
     bodyChunks.push(chunk); 
     }).on('end', function() { 
     var body = Buffer.concat(bodyChunks); 
     console.log('BODY: ' + body); 
     // ...and/or process the entire body here. 
     var op = input.entities.map(function(item) { 
      return item.name; 
     }); 
      console.log(op); 
     }) 
    }); 

    req.on('error', function(e) { 
     console.log('ERROR: ' + e.message); 
    }); 

    console.log('Server listening on port 80'); 

Я не знаю, где я неправильно, потому что в консоли можно увидеть тело, имеющее данные JSon ,

Kidnly помогите мне.

+1

Ну, ['Buffer.concat'] (https://nodejs.org/api/buffer.html#buffer_class_method_buffer_concat_list_totallength) возвращает новый экземпляр' Buffer', а 'Buffer' не имеют свойства 'products' , Предположительно вам нужно сначала преобразовать буфер в строку и использовать 'JSON.parse' для преобразования сериализованных данных в фактическое значение JavaScript. * «потому что в консоли я вижу тело, имеющее данные json». * Правильно, JSON нужно сначала проанализировать **. См. Http://stackoverflow.com/q/45015/218196. –

+0

что такое вывод console.log ('BODY:' + body); ? –

+0

Извините, ребята, я обновляю вопрос о функциях карты, нужно изменить название «products». Для публикации здесь я изменил свой GET-URL. –

ответ

0

Спасибо, @Felix Kling Как указано, я добавил,
вар body2 = JSON.parse (тело); и я получил массив.

var body2 = JSON.parse(body); 
    // ...and/or process the entire body here. 
    var op = body2.entities.map(function(item) { 
     return item.name; 
     }); 
     console.log(op); 

Если у меня есть другие вопросы, я вернусь.

+0

Как я могу получить доступ к переменной op вне функции? –

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