【问题标题】:require.js POST request to spotify web api returning "Error parsing json"require.js POST 请求以发现返回“解析 json 错误”的 web api
【发布时间】:2014-08-26 17:06:00
【问题描述】:

根据Spotify Web API Create Playlist,一旦授权成功,带有 access_token 和其他一些参数的 POST 应该为用户创建一个新的播放列表。 链接中的示例 CURL 命令

curl -X POST "https://api.spotify.com/v1/users/wizzler/playlists"  
-H "Authorization: Bearer {your access token}"  
-H "Content-Type: application/json" --data "{\"name\":\"A New Playlist\", \"public\":false}"

这对我来说很好。但是当我使用request 库从nodejs 应用程序运行以下代码时,响应统计为Error parsing json

我在这里缺少什么?

更新:我尝试根据 request.js 示例将 data 更改为 form。我还尝试删除 stringify 调用,并直接传递对象。错误仍然存​​在。

var request = require('request');
var authOptions1 = {
    url: 'https://api.spotify.com/v1/users/' + username + '/playlists',
    data: JSON.stringify({
        'name': name,
        'public': false
    }),
    dataType:'json',
    headers: {
        'Authorization': 'Bearer ' + access_token,
        'Content-Type': 'application/json',
    }
};

console.log(authOptions1);

request.post(authOptions1, function(error, response, body) {
    console.log(body);
});

【问题讨论】:

  • 删除JSON.stringify();它应该为您将 data 属性转换为 JSON。
  • 试过这个。这是行不通的。同样的错误

标签: javascript json node.js spotify


【解决方案1】:

不要使用data,而是使用body

    var request = require('request');
    var authOptions1 = {
        url: 'https://api.spotify.com/v1/users/' + username + '/playlists',
        body: JSON.stringify({
            'name': name,
            'public': false
        }),
        dataType:'json',
        headers: {
            'Authorization': 'Bearer ' + access_token,
            'Content-Type': 'application/json',
        }
    };

    request.post(authOptions1, function(error, response, body) {
        console.log(body);
    });

应该可以的。

【讨论】:

    【解决方案2】:

    根据https://github.com/mikeal/request#requestoptions-callback

    var authOptions1 = {
        url: 'https://api.spotify.com/v1/users/' + username + '/playlists',
        form: { // data = form
            'name': name,
            'public': false
        },
        json: true, // dataType: json = json: true
        headers: {
            'Authorization': 'Bearer ' + access_token,
            'Content-Type': 'application/json',
        }
    };
    
    request.post(authOptions1, function(error, response, body) {
        console.log(body);
    });
    

    【讨论】:

    • 您使用快速 JSON 解析器吗? var bodyParser = require('body-parser'); app.use(bodyParser.json())
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-14
    • 2022-06-12
    相关资源
    最近更新 更多