使用Axios发布JSON时出现问题(“传递的值不是字符串或JSON对象”)

时间:2019-06-07 01:30:50

标签: javascript node.js json axios

编辑:已解决,在下面将详细信息作为答案...相当愚蠢的用户错误

我正在尝试为SteelSeries Gamesense写一个简单的插件,以在GameDAC屏幕上显示iTunes中当前正在播放的歌曲。基本上,引擎通过提供的服务器来侦听JSON正文的发布请求。我一直在努力使我的请求工作一段时间,但没有成功。

我在Postman上测试了请求,该请求应该可以正常工作,所以问题可能出在语法上。

const axios = require('axios');


const coreProps = require(process.env.ProgramData + '/SteelSeries/SteelSeries Engine 3/coreProps.json');
const url = JSON.stringify(coreProps['address']);

axios.defaults.baseURL = 'http://' + url.replace(/"/g,'');
axios.defaults.headers['post'] = {'Content-Type': 'application/json'};

console.log(axios.defaults.headers);

function bind_itunes() {

    const data = {
        "game": "ITUNES",
        "event": "NOWPLAYING",
        "handlers": [
            {
                "device-type": "screened",
                "zone": "one",
                "mode": "screen",
                "datas": [
                    {
                        "has-text": true,
                        "context-frame-key": "songname"
                    }
                ]
            }
        ]
    };

    axios.post('game_event', JSON.stringify(data))
        .then((res) => {
            console.log(res)
        }).catch((error) => {
        console.error(error)
    })
}

bind_itunes();

代码由于Axios的长错误阻止而失败,并出现错误

"data: { error: 'passed value not string or JSON object' } }"

完整的错误日志(因为它很长,所以为astebin):https://pastebin.com/aLguKQ2C

邮递员屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:2)

我会建议与@Phil相同:使用axios.post时不要对有效负载进行字符串化。 Axios文档中的示例可能会有用:https://github.com/axios/axios。我查看了您的屏幕截图,看来您已成功收到状态码为200的响应。您仍然遇到问题还是对请求的响应不同?

答案 1 :(得分:2)

下次,在提出问题之前,我还将确保对API端点进行三重检查。

从比较屏幕截图和代码时可以看出,我在错误的端点(game_event而不是bind_game_event)上进行轮询,这显然会导致请求不正确。

经过数小时的思考后解决了该问题。

感谢所有尝试过的人,对不起,麻烦您了。