Spotify API - JSON возвращает неопределенное значение, но я все еще могу console.log () - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь использовать API веб-плеера Spotify для доступа к значению 'device_id'. Согласно документам, выполняемый мной вызов API-интерфейса на стороне сервера должен возвращать «json полезную нагрузку, содержащую объекты устройства», как показано ниже:

Это мой вызов API:

app.get('/c+party', (req,res)=>{
    const access_token = req.query.access_token;
    var device_id;
    var options = {
        url: 'https://api.spotify.com/v1/me/player/devices',
        headers: {
            'Authorization': 'Bearer '+ access_token,
            'Content-Type':'application/json'
        },
        json:true
    };
    request.get(options, (err,response,body) => {
        const device_id = body.devices[0].id;
        res.json(device_id);
    });
});

Он должен вернуть:

{
  "devices" : [ {
    "id" : "5fbb3ba6aa454b5534c4ba43a8c7e8e45a63ad0e",
    "is_active" : false,
    "is_private_session": true,
    "is_restricted" : false,
    "name" : "My fridge",
    "type" : "Computer",
    "volume_percent" : 100
  } ]
}

изменить, вот ошибка:

const device_id = body.devices[0].id;
                                          ^

TypeError: Cannot read property 'id' of undefined
    at Request._callback (C:\code\music-room\src\server.js:69:43)
    at Request.self.callback (C:\code\music-room\node_modules\request\request.js:185:22)
    at Request.emit (events.js:223:5)
    at Request.<anonymous> (C:\code\music-room\node_modules\request\request.js:1154:10)
    at Request.emit (events.js:223:5)
    at IncomingMessage.<anonymous> (C:\code\music-room\node_modules\request\request.js:1076:12)
    at Object.onceWrapper (events.js:312:28)
    at IncomingMessage.emit (events.js:228:7)
    at endReadableNT (_stream_readable.js:1185:12)
    at processTicksAndRejections (internal/process/task_queues.js:81:21)

Я могу утешить .log (body), чтобы увидеть желаемый результат, но я не могу получить доступ к нужному значению. Когда мой код выполняется, я получаю сообщение об ошибке, что body.devices не определен. Любая помощь с исправлением? Я новенький с express. js - моя маршрутизация испортила это?

Другое редактирование: я попытался res. json (body) ... мой сервер отвечает пустым массив объектов 'devices'.

1 Ответ

0 голосов
/ 29 марта 2020

Вы на самом деле отправляете пустой ответ из вашего API. Вот что делает res.end(). Я не совсем уверен, каково содержание ответа API Spotify, но если вы видите правильное значение JSON в переменной body, вы можете использовать res.json(...) вместо res.end(), например так:

request.get(options, (err,response,body) => {
 // Assuming that the body variable contains the correct data
 const device_id = body.devices[0].id;
 res.json(device_id);
});
...